我将Spring 3.1.4与jackson-datatype-hibernate 2.2.3结合使用,并从REST-Service开始从JPA获取User-Object。因此,现在邮件是自动获取惰性的。我想要的是一个JSON,只是名称和邮件是简单的null。
MyRest方法:
@Transactional(readOnly = true)
@RequestMapping(
value="/get/{userId}",
method = RequestMethod.GET,
produces={"application/json","application/xml"}
)
@ResponseBody
public User getUser(@PathVariable("userId") Long userId){
User result = userManager.getUser(userId);
return result;
}最小化用户类:
public class User{
private String name;
@OneToMany
private Set<Mail> mails;
}自定义Jackson对象映射器:
public class CustomJacksonObjectMapper extends ObjectMapper {
public CustomJacksonObjectMapper() {
super();
this.configure(DeserializationFeature.UNWRAP_ROOT_VALUE, true);
this.configure(SerializationFeature.WRAP_ROOT_VALUE, true);
this.setSerializationInclusion(Include.NON_NULL);
}}
它通过以下方式初始化
@Configuration
@ComponentScan(basePackages = { "com.fabel" })
public class SpringConfiguration extends WebMvcConfigurationSupport{
@Bean
public ObjectMapper objectMapper() {
CustomJacksonObjectMapper objectMapper = new CustomJacksonObjectMapper();
Hibernate4Module hibernate4Module = new Hibernate4Module();
objectMapper.registerModule(hibernate4Module);
return objectMapper;
}
@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
converter.setObjectMapper(objectMapper());
converters.add(converter);
}}
我将我的实现定位在德国博客http://blog.rasc.ch/?p=2441上,并做了上面提到的所有事情。你知道我能做什么吗?@JacksonIgnore是没有选择的,因为有时我需要发送懒惰的对象。然后,我将简单地使用Hibernate.initialize。我遗漏了什么?
发布于 2017-03-14 01:57:03
这可能太晚了,不管怎样,有一个库可以帮助你完成hiberante的延迟加载,这个库就是jackson-datatype-hibernate4。
您可以执行以下操作来创建一个可以加载惰性数据并序列化它的ObjectMapper对象:
ObjectMapper mapper = new ObjectMapper();
Hibernate4Module hibernate4Module = new Hibernate4Module();
hibernate4Module.enable(Hibernate4Module.Feature.SERIALIZE_IDENTIFIER_FOR_LAZY_NOT_LOADED_OBJECTS);
mapper.registerModule(hibernate4Module);https://stackoverflow.com/questions/21273163
复制相似问题