Hibernate 配置Jackson以在Spring引导中省略延迟加载属性
在纯java配置的spring boot mvc项目中,如何配置Jackson以省略延迟加载属性如果您正在使用SpringBoot,理想情况下您应该已经有了Hibernate4Module。 否则,请添加此依赖项Hibernate 配置Jackson以在Spring引导中省略延迟加载属性,hibernate,spring-boot,jackson,lazy-loading,Hibernate,Spring Boot,Jackson,Lazy Loading,在纯java配置的spring boot mvc项目中,如何配置Jackson以省略延迟加载属性如果您正在使用SpringBoot,理想情况下您应该已经有了Hibernate4Module。 否则,请添加此依赖项 <dependency> <groupId>com.fasterxml.jackson.datatype</groupId> <artifactId>jackson-datatype-hiberna
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-hibernate4</artifactId>
<version>2.5.3</version>
</dependency>
有关Hibernate的不同版本,请参阅以下Hibernate模块:
// for Hibernate 4.x:
mapper.registerModule(new Hibernate4Module());
// or, for Hibernate 5.x
mapper.registerModule(new Hibernate5Module());
// or, for Hibernate 3.6
mapper.registerModule(new Hibernate3Module());
现在,您需要通过消息转换器注册您的HibernateAwareObject映射器。为此,创建一个扩展WebMvcAutoConfiguration.WebMvcAutoConfigurationAdapter的配置类。(如果您已经有了一个,请执行下一步)
现在使用HibernateObjectMapper注册MessageConverter:
@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters){
List<MediaType> supportedMediaTypes=new ArrayList<>();
supportedMediaTypes.add(MediaType.APPLICATION_JSON);
supportedMediaTypes.add(MediaType.TEXT_PLAIN);
MappingJackson2HttpMessageConverter converter=new MappingJackson2HttpMessageConverter();
converter.setObjectMapper(new HibernateAwareObjectMapper());
converter.setPrettyPrint(true);
converter.setSupportedMediaTypes(supportedMediaTypes);
converters.add(converter);
super.configureMessageConverters(converters);
}
@覆盖
公共无效配置MessageConverters(列表对我来说,实现这一点最简单的方法是扩展WebMvcAutoConfiguration.WebMvcAutoConfigurationAdapter
并覆盖extendedmessageconverters
方法。我在里面搜索了MappingJackson2HttpMessageConverter
,刚刚注册了Jackson Hibernate模块
@Configuration
@AutoConfigureAfter(DispatcherServletAutoConfiguration.class)
public class CustomWebMvcAutoConfig extends WebMvcAutoConfiguration.WebMvcAutoConfigurationAdapter
{
@Override
public void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
for (HttpMessageConverter converter : converters) {
if (converter instanceof org.springframework.http.converter.json.MappingJackson2HttpMessageConverter) {
ObjectMapper mapper = ((MappingJackson2HttpMessageConverter) converter).getObjectMapper();
mapper.registerModule(new Hibernate4Module());
// replace Hibernate4Module() with the proper class for your hibernate version.
}
}
}
}
@配置
@AutoConfigureAfter(DispatcherServletAutoConfiguration.class)
公共类CustomWebMvcAutoConfig扩展了WebMvcAutoConfiguration.WebMvcAutoConfigurationAdapter
{
@凌驾
public void extendMessageConverters(列表对于最新版本的Spring Boot,这要容易得多
任何类型为com.fasterxml.jackson.databind.Module的bean都将自动向自动配置的Jackson2ObjectMapperBuilder注册,并应用于它创建的任何ObjectMapper实例。这为向应用程序添加新功能时贡献自定义模块提供了一种全局机制
首先确保您具有所需的Jackson依赖项:
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-hibernate4</artifactId>
</dependency>
@Grzegorz所写的内容对我来说是完美的。仅在这里介绍不带自定义类的his解决方案:
编辑:我在RestController域中
@Configuration
public class CustomWebMvcAutoConfig extends WebMvcConfigurerAdapter
{
@Override
public void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
for (HttpMessageConverter converter : converters) {
if (converter instanceof org.springframework.http.converter.json.MappingJackson2HttpMessageConverter) {
ObjectMapper mapper = ((MappingJackson2HttpMessageConverter) converter).getObjectMapper();
mapper.registerModule(new Hibernate5Module());
// replace Hibernate4Module() with the proper class for your hibernate version.
}
}
}
}
@配置
公共类CustomWebMvcAutoConfig扩展了WebMVCConfigureAdapter
{
@凌驾
public void extendMessageConverters(列表I用户springboot和hibernamte5.0.x。
它起作用了
1.pom.xml
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-hibernate5</artifactId>
<version>2.8.4</version>
</dependency>
com.fasterxml.jackson.datatype
jackson-datatype-hibernate5
2.8.4
2.网络配置
@Configuration
public class WebConfig implements WebMvcConfigurer {
public void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
for (HttpMessageConverter converter : converters) {
if (converter instanceof org.springframework.http.converter.json.MappingJackson2HttpMessageConverter) {
ObjectMapper mapper = ((MappingJackson2HttpMessageConverter) converter).getObjectMapper();
mapper.registerModule(new Hibernate5Module());
// replace Hibernate4Module() with the proper class for your hibernate version.
}
}
}
}
@配置
公共类WebConfig实现WebMVCConfiguer{
公共无效扩展消息转换器(列表仅列出一件小事……请确保您正在扩展org.springframework.web.servlet.config.annotation.WebMVCConfigureAdapter,而不是spring boot的。但是spring5 WebMVCConfigureAdapter已被弃用……这个答案有更新吗?你是一位幸运的圣人。在我切换到这种配置方法之前,你没有在这个应用程序中工作过:OThanks@Grze)gorz,你让我走出了2天的地狱!这对我来说非常有效。我在RestController域中,使用hibernate 5。Spring完成Json Jackson自动序列化,hibernate会话和FetchType LAZY或Earge现在以需要的方式一起工作。注意:现在不需要任何@JsonInclude(JsonInclude.Include.NON_缺席/NON_空/等)获取此org.springframework.beans.factory.BeanCreationException:创建名为com.example.app.in28分钟层次结构实体应用程序中定义的“hibernate5Module”的bean时出错:通过工厂方法实例化bean失败;嵌套异常为org.springframework.beans.beanInstationException:实例化失败[com.fasterxml.jackson.databind.Module]:工厂方法“hibernate5Module”引发异常;嵌套异常为java.lang。错误:未解决的编译问题:hibernate5Module无法解析为类型欢迎使用堆栈溢出!发布答案时,请确保您正在解释问题是什么以及需要如何解决,而不仅仅是发布代码。[如何回答]()是一个关于如何编写堆栈溢出的好答案的很棒的文档。(有趣的是,SpringBoot文档说,如果模块是由@Bean注释的方法提供的,那么它可以注册该模块,但是)对我来说,除了这个解决方案之外,没有一个解决方案是有效的。
@Configuration
public class CustomWebMvcAutoConfig extends WebMvcConfigurerAdapter
{
@Override
public void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
for (HttpMessageConverter converter : converters) {
if (converter instanceof org.springframework.http.converter.json.MappingJackson2HttpMessageConverter) {
ObjectMapper mapper = ((MappingJackson2HttpMessageConverter) converter).getObjectMapper();
mapper.registerModule(new Hibernate5Module());
// replace Hibernate4Module() with the proper class for your hibernate version.
}
}
}
}
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-hibernate5</artifactId>
<version>2.8.4</version>
</dependency>
@Configuration
public class WebConfig implements WebMvcConfigurer {
public void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
for (HttpMessageConverter converter : converters) {
if (converter instanceof org.springframework.http.converter.json.MappingJackson2HttpMessageConverter) {
ObjectMapper mapper = ((MappingJackson2HttpMessageConverter) converter).getObjectMapper();
mapper.registerModule(new Hibernate5Module());
// replace Hibernate4Module() with the proper class for your hibernate version.
}
}
}
}