首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >延迟对象在Jackson ObjectMapper中未转换为null

延迟对象在Jackson ObjectMapper中未转换为null
EN

Stack Overflow用户
提问于 2014-01-22 10:40:50
回答 1查看 972关注 0票数 2

我将Spring 3.1.4与jackson-datatype-hibernate 2.2.3结合使用,并从REST-Service开始从JPA获取User-Object。因此,现在邮件是自动获取惰性的。我想要的是一个JSON,只是名称和邮件是简单的null。

MyRest方法:

代码语言:javascript
复制
@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;
}

最小化用户类:

代码语言:javascript
复制
public class User{

    private String name;

    @OneToMany
    private Set<Mail> mails;
}

自定义Jackson对象映射器:

代码语言:javascript
复制
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);
}

}

它通过以下方式初始化

代码语言:javascript
复制
@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。我遗漏了什么?

EN

回答 1

Stack Overflow用户

发布于 2017-03-14 01:57:03

这可能太晚了,不管怎样,有一个库可以帮助你完成hiberante的延迟加载,这个库就是jackson-datatype-hibernate4

您可以执行以下操作来创建一个可以加载惰性数据并序列化它的ObjectMapper对象:

代码语言:javascript
复制
ObjectMapper mapper = new ObjectMapper();
Hibernate4Module hibernate4Module = new Hibernate4Module();
hibernate4Module.enable(Hibernate4Module.Feature.SERIALIZE_IDENTIFIER_FOR_LAZY_NOT_LOADED_OBJECTS);
mapper.registerModule(hibernate4Module);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21273163

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档