我有一个在 Spring Web MVC 中使用 Spring Data JPA 和 REST 控制器的解决方案。持久性提供者是 Hibernate。
持久层是使用 Spring 存储库构建的,并且在 REST 控制器和存储库之间存在一个服务层:
Entity <--> Repository <--> Service <--> Controller
在实体级别,我有 FetchType = LAZY 的 @OneToMany 字段。
当 REST 控制器进行序列化时,就会进行获取,但在某些情况下这是不希望的。
我已经尝试使用 @JSONIninclude Jackson 注释,并且序列化仍然发生。
有人可以帮我提供一个经过验证的解决方案吗?
如果我理解正确,您只想在获取延迟加载集合时进行序列化,但您不希望序列化触发获取。
如果是这种情况,您应该使用杰克逊数据类型休眠 https://github.com/FasterXML/jackson-datatype-hibernate,并添加为他们的文档已经解释的
public class HibernateAwareObjectMapper extends ObjectMapper {
public HibernateAwareObjectMapper() {
registerModule(new Hibernate4Module());
}
}
比注册
<mvc:annotation-driven>
<mvc:message-converters>
<!-- Use the HibernateAware mapper instead of the default -->
<bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
<property name="objectMapper">
<bean class="path.to.your.HibernateAwareObjectMapper" />
</property>
</bean>
</mvc:message-converters>
</mvc:annotation-driven>
该模块有一个功能.FORCE_LAZY_LOADING设置,告诉对象是否应该强制加载然后序列化,默认设置为false我相信这是你需要的行为
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)