配置Jackson以在Spring Boot中省略延迟加载属性

R K*_*jal 12 hibernate jackson spring-boot lazyload

在spring boot mvc项目中使用纯java配置如何配置Jackson以省略延迟加载属性

Rob*_*unt 19

使用最新版本的Spring Boot,这更容易.

任何类型为com.fasterxml.jackson.databind.Module的bean都将自动注册到自动配置的Jackson2ObjectMapperBuilder,并应用于它创建的任何ObjectMapper实例.这为您在应用程序中添加新功能时提供了一种提供自定义模块的全局机制.

74.3自定义Jackson ObjectMapper

首先确保您具有所需的Jackson依赖性:

<dependency>
    <groupId>com.fasterxml.jackson.datatype</groupId>
    <artifactId>jackson-datatype-hibernate4</artifactId>
</dependency>
Run Code Online (Sandbox Code Playgroud)

然后,您可以@Bean在应用程序上下文中将模块包含为a .

@Bean
public Module hibernate4Module()
{
    return new Hibernate4Module();
}
Run Code Online (Sandbox Code Playgroud)


R K*_*jal 8

如果您使用的是SpringBoot,理想情况下您应该已经拥有Hibernate4Module.否则添加此依赖项

    <dependency>
        <groupId>com.fasterxml.jackson.datatype</groupId>
        <artifactId>jackson-datatype-hibernate4</artifactId>
        <version>2.5.3</version>
    </dependency>
Run Code Online (Sandbox Code Playgroud)

接下来创建一个名为"HibernateAwareObjectMapper"的类或任何你想要命名的类:

以下内容:

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.datatype.hibernate4.Hibernate4Module;

    public class HibernateAwareObjectMapper extends ObjectMapper {

        public HibernateAwareObjectMapper() {
            registerModule(new Hibernate4Module());
        }
    }
Run Code Online (Sandbox Code Playgroud)

对于不同版本的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());
Run Code Online (Sandbox Code Playgroud)

现在,您需要通过消息Converter 注册HibernateAwareObjectMapper.为此,创建一个扩展的Config类,扩展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);
}
Run Code Online (Sandbox Code Playgroud)

中提琴!!! 那应该够了.这是一种纯粹的java(无xml)方式,可以为spring boot Web应用程序执行此操作.

如果您想添加到答案,请随时发表评论.


小智 6

我使用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>
Run Code Online (Sandbox Code Playgroud)

2. Webconfig

@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.
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 欢迎使用堆栈溢出!发布答案时,请确保您解释了问题所在以及需要如何修复,而不仅仅是发布代码。[How to Answer] (https://stackoverflow.com/help/how-to-answer) 是关于如何在 Stack Overflow 上写出好的答案的很棒的文档。 (2认同)