Json:API 要求建议使用连字符连接复合属性名称(如名字)
...
{
"type": "people",
"id": "9",
"attributes": {
"first-name": "Foo",
"last-name": "Bar",
}
...
在 Java 中,带连字符的属性名称不是有效的标识符。
我正在使用 Katharsis 2.0.1 在 spring-boot 1.3.0 中构建一个基于 JSON:API 的服务后端。我的调用/消费前端应用是使用 Ember 2.0 和 ember-data 构建的。
不幸的是,Katharsis 似乎没有将 Java 中的复合属性名称转换为 Json 中的带连字符的属性名称。
这是 Katharsis 为 GET /api/customers 资源生成的结果
{
"data": [
{
"type": "customers",
"id": "1",
"attributes": {
"cpn": "-1234567",
"firstName": "John",
},
...
但应该是"first-name": "John"
我是否缺少某些配置或如何告诉 Katharsis 使用连字符属性?
谢谢!
最佳答案
按照@Ethans 的建议,我坚持在 Katharsis.io 中使用驼峰命名法属性,并让 Ember 覆盖属性名称。
在 Ember 中,JSONAPISerializer 支持所有情况,因为它提供了易于覆盖的 Hook 。 keyForAttribute 的文档和 keyForRelationship显示如何自定义键的示例。
在我的例子中,我必须实现以下序列化程序类:
// app/application/serializer.js or app/serializers/application.js
import Ember from 'ember';
import DS from 'ember-data';
export default DS.JSONAPISerializer.extend({
keyForAttribute: function(attr, method) {
return Ember.String.camelize(attr);
},
keyForRelationship: function(key, relationship, method) {
return Ember.String.camelize(key);
}
});
关于json - 如何使用 Katharsis.io 在 Spring Controllers Json 响应中连字符复合属性名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33940628/