带有Spring的@RequestBody和Object Identities的Ember数据

时间:2016-06-21 14:39:11

标签: json spring ember.js spring-boot ember-data

我的后端是Spring(Boot),我和EmberJS一起走得很远。现在遇到轻微的障碍,因为当我从Ember-Data创建新记录时,它会使用标识发布对象:

{ "thing": {"name": "The Thing"} }

Jackson提供的默认映射不承担身份,因此无法将JSON映射到实体。我基本上有3个选项,我想知道是否有其他人已经走这条路,他们是如何解决这个问题的。

选项1 - 创建用身份

包装我的实体的DTO
public class Thing {
  private String name;
}

// use this for the @RequestBody
public class ThingDTO {
  private Thing thing;
}

选项2 - 通过自定义映射器配置Jackson,将JSON反序列化为我的标准对象。

选项3 - 为Ember-Data配置适配器/序列化程序,使其不包含对象标识。

1 个答案:

答案 0 :(得分:1)

我使用@JsonRootName并配置映射器以解包根值。

@JsonRootName(value = "thing")
public class Thing {

}

然后在Application.java中:

@Bean
public MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter() {
    ObjectMapper mapper = new ObjectMapper();
    mapper.configure(DeserializationFeature.UNWRAP_ROOT_VALUE, true);
    MappingJackson2HttpMessageConverter converter =
            new MappingJackson2HttpMessageConverter(mapper);
    return converter;
}