2

我想配置 Jackson 以便它使用构造函数自动反序列化,而不需要注释。使用 Spring Boot,这对大多数构造函数来说都是开箱即用的,但对于单参数构造函数来说却不是。

Jackson 2.12 发布了一个配置选项,以启用单参数构造函数的反序列化:

ObjectMapper mapper = JsonMapper.builder()
    .constructorDetector(ConstructorDetector.USE_PROPERTIES_BASED)
    .build()

但是,这不使用通常的功能启用/禁用界面。如何使用 Spring Boot 进行设置?

  1. 我不想丢失任何应用于 ObjectMapper bean 的 Spring Boot 自动配置。
  2. 我无法定义 Jackson2ObjectMapperBuilder bean,因为从 Spring Boot 2.4.1 开始,它还没有更新为允许设置 constructorDetector。
4

1 回答 1

2

定义一个 beanJackson2ObjectMapperBuilderObjectMapper将阻止对这些 bean 应用任何自动配置,如文档所述。

相反,您可以定义一个Jackson2ObjectMapperBuilderCustomizerlambda 类型的 bean,它允许您在 Spring Boot auto-configured 上调用其他方法Jackson2ObjectMapperBuilder

此外,Jackson2ObjectMapperBuilder还有postConfigurer另一个回调方法,它允许您调用自动配置的方法ObjectMapper

把这些放在一起:

@Bean
public Jackson2ObjectMapperBuilderCustomizer jackson2ObjectMapperBuilderCustomizer() {
    return builder -> builder.postConfigurer(mapper ->
            mapper.setConstructorDetector(USE_PROPERTIES_BASED)
    );
}
于 2020-12-30T12:13:56.110 回答