Json:API 要求建议复合属性名称被删减(如名字)
EXCEPT
在Java中,hyphened属性名称不是有效的标识符。
我使用Katharsis 2.0.1在spring-boot 1.3.0中构建基于JSON:API的服务后端。我的呼叫/消费前端应用程序是使用Ember 2.0和ember-data构建的。
不幸的是,Katharsis似乎并没有将Java中的复合属性名称转换为Json中的超大属性名称。
这是Katharsis为资源GET / api / customers
生成的结果...
{
"type": "people",
"id": "9",
"attributes": {
"first-name": "Foo",
"last-name": "Bar",
}
...
但它应该是"名字":" John"
我是否缺少某些配置或如何告诉Katharsis做连字符属性?
谢谢!
答案 0 :(得分:2)
按照@Ethans的建议,我坚持使用Katharsis.io中的camelCase属性,让Ember覆盖属性名称。
在Ember中, JSONAPISerializer 支持所有情况,因为它提供了易于覆盖的钩子。 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);
}
});
答案 1 :(得分:1)
JSON:API不要求多字属性使用连字符;它只是recommends。
对于你所描述的原因,这个建议,imo,是愚蠢的。它只会使互操作性变得更难。所以我的建议只是忽略推荐并坚持使用camelCase属性。再一次,没有任何关于做那些被禁止的事情。
某些(愚蠢的)工具可能会假设您的API遵循dasherized建议。但是,如果一个工具假设,并且没有给你一种方法来覆盖这个假设,那么它就是该工具中的一个错误,你将通过展示工具的作者他们需要支持所有有效的方式来帮助社区。 JSON:API使用,而不仅仅是遵循建议的。
P.S。虽然以上只是我的意见/建议,但我是JSON:API的编辑之一,所以这是一个明智的意见,我提到的事实(例如关于简化为推荐)是正确的。
答案 2 :(得分:1)
在最新版本中添加了对jackson PropertyNamingStrategy的支持,因此可以使用缩减名称。