Ember 具有 Spring 的 @RequestBody 和对象标识的数据
Ember Data with Spring's @RequestBody and Object Identities
我的后端是 Spring(启动),我对它和 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 配置 adapter/serializer,使其不包含对象标识。
我使用@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;
}
我的后端是 Spring(启动),我对它和 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 配置 adapter/serializer,使其不包含对象标识。
我使用@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;
}