如何使用Katharsis.io连接Spring Controllers Json响应中的复合属性名称

时间:2015-11-26 14:02:08

标签: json spring spring-boot ember-data json-api

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做连字符属性?

谢谢!

3 个答案:

答案 0 :(得分:2)

按照@Ethans的建议,我坚持使用Katharsis.io中的camelCase属性,让Ember覆盖属性名称。

在Ember中, JSONAPISerializer 支持所有情况,因为它提供了易于覆盖的钩子。 keyForAttributekeyForRelationship的文档显示了如何自定义键的示例。

在我的情况下,我必须实现以下序列化程序类:

// 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的支持,因此可以使用缩减名称。