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

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

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

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

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

【问题讨论】:

  • 你应该使用Jackson2ObjectMapperBuilderCustomizer

标签: spring spring-boot jackson


【解决方案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

【讨论】:

  • 这适用于简单功能,但不适用于复杂功能。
猜你喜欢
  • 2016-06-06
  • 2015-06-22
  • 2018-12-14
  • 1970-01-01
  • 2019-12-07
  • 1970-01-01
  • 2014-12-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多