如何在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 客户端?