Jackson2ObjectMapperBuilder 启用字段可见性 ANY



我正在使用spring-boot,想要自定义创建的ObjectMapper。

我想做的是能够序列化没有 getter 或 setter 的对象。在此之前,通过将JsonAutoDetect.Visibility.ANY放在ObjectMapper上来完成。

但是如何使用我当前公开的 Jackson2ObjectMapperBuilder bean 启用此功能?

您可以使用重写

configure(ObjectMapper) 方法的 Jackson2ObjectMapperBuilder 子类:

@Bean
public Jackson2ObjectMapperBuilder objectMapperBuilder() {
    return new Jackson2ObjectMapperBuilder() {
        @Override
        public void configure(ObjectMapper objectMapper) {
            super.configure(objectMapper);
            objectMapper.setVisibility(PropertyAccessor.FIELD, Visibility.ANY);
        }
    };
}
如果你想

通过 Spring Boot 提供的 spring.jackson.* 属性保持 ObjectMapper 的可配置性,那么你最好不要定义自己的 Jackson2ObjectMapperBuilder bean(有关详细信息,请查看 JacksonAutoConfiguration 类中的 JacksonObjectMapperBuilderConfiguration)。

你可以做的是:

@Bean
public ObjectMapper objectMapper(Jackson2ObjectMapperBuilder mapperBuilder) {
    return mapperBuilder.build().setVisibility(PropertyAccessor.FIELD, Visibility.ANY);
}

我花了半天时间玩不同的设置。所以我设法在以下情况下使用它(1.3.2.发布):

  • 我在简单@Configuration注释的配置类中配置杰克逊(未从WebMvcConfigurerAdapter扩展)
  • 我没有@EnableWebMvc

那么Jackson2ObjectMapperBuilder objectMapperBuilder解决方案是工作,但忽略属性中的spring.jackson.serialization.indent_output: true

最后我完成了

 @Autowired(required = true)
 public void configeJackson(ObjectMapper objectMapper) {
     objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.NONE)
            .setVisibility(PropertyAccessor.FIELD, JsonAutoDetect.Visibility.ANY);
 }

但这一切对我来说都是困惑。我写了一个关于所有这些魔法的任何解释的问题,以便有一些不符和解决问题试错法:是否有任何 Spring 引导文档来了解 Web MVC 配置的工作原理?

相关内容

  • 没有找到相关文章

最新更新