json - 如何使用 Katharsis.io 在 Spring Controllers Json 响应中连字符复合属性名称

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

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/

相关文章:

javascript - 能够通过 Postman 创建帐户,从 React 创建问题

java - BeanFactoryPostProcessor修改实际的bean定义而不是实例?

java - Spring Batch 或 BIRT 框架

java - SpringMVC-FileUpload - 客户端发送的请求在语法上不正确

java - Spring Security如何在用户注册时为用户设置角色

java - Spring 存储库还保存了我不想保存的对象

Spring测试@Sql不从sql文件中插入数据

jquery - 如何在 grails 2.0 中获取 JSON

json - 使用\u0000\x00 去 json.Unmarshal key

arrays - 如何计算 Delphi 中 JSON 数组中元素的数量