如何在spring boot应用程序中配置Jackson而不覆盖纯java中的springs默认设置

Posted

技术标签:

【中文标题】如何在spring boot应用程序中配置Jackson而不覆盖纯java中的springs默认设置【英文标题】:How to configure Jackson in spring boot application without overriding springs default setting in pure java 【发布时间】:2018-07-09 05:47:25 【问题描述】:

在我的 Spring Boot 应用程序中,我使用 Jackson 通过在需要的地方注入 ObjectMapper 来序列化对象。 我找到了这个答案:https://***.com/a/32842962/447426 但是这个创建了一个新的映射器 - 使用杰克逊默认设置。

另一方面,我在官方文档中找到了this。我真的不明白。没有示例代码。

那么如何在Spring的默认对象映射器的基础上配置springs ObjectMapper呢?

此配置应在“ObjectMapper”上处于活动状态,无论注入何处。

【问题讨论】:

你应该使用Jackson2ObjectMapperBuilderCustomizer 【参考方案1】:

您应该为此使用Jackson2ObjectMapperBuilderCustomizer

@Configuration
public class JacksonConfiguration 

    @Bean
    public Jackson2ObjectMapperBuilderCustomizer addCustomBigDecimalDeserialization() 
        return new Jackson2ObjectMapperBuilderCustomizer() 

            @Override
            public void customize(Jackson2ObjectMapperBuilder jacksonObjectMapperBuilder) 
               jacksonObjectMapperBuilder.featuresToDisable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
               // Add your customization
               // jacksonObjectMapperBuilder.featuresToEnable(...)      
            
        ;
    


因为Jackson2ObjectMapperBuilderCustomizer 是函子,Java 8 支持更紧凑的代码:

@Configuration
public class JacksonConfiguration 

    @Bean
    public Jackson2ObjectMapperBuilderCustomizer addCustomBigDecimalDeserialization() 
        return builder -> 
            builder.featuresToDisable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
            // Add your customization
            // builder.featuresToEnable(...)      
            ;
        
    

【讨论】:

谢谢。但是如何配置“DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES MapperFeature.DEFAULT_VIEW_INCLUSION 等功能?我在jackson2ObjectMapperBuilder 上看到了很多方便的方法,但这是否涵盖了所有内容? 刚刚编辑了您的帖子 - 几乎相同:-) - 谢谢【参考方案2】:

另一方面,我在官方文档中找到了这个。我真的不明白。没有示例代码。

这只是说您只需要在application.properties 文件中设置正确的属性即可启用或禁用各种Jackson 功能。

spring.jackson.mapper.default-view-inclusion=false
spring.jackson.deserialization.fail-on-unknown-properties=false

【讨论】:

这适用于简单功能,但不适用于复杂功能。

以上是关于如何在spring boot应用程序中配置Jackson而不覆盖纯java中的springs默认设置的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Spring Boot 应用程序中配置 DispatcherServlet?

如何在spring-boot可执行jar文件中配置java logging.properties

如何在spring boot应用程序中配置Jackson而不覆盖纯java中的springs默认设置

如何在 spring-boot 应用程序中配置多个 Keycloak sso 客户端?

spring-boot中如何配置tomcat访问日志的位置和名称?

如何在 Spring Boot 的 application.yml 中配置滚动文件附加程序