Jackson2ObjectMapperBuilder启用字段可见性ANY

时间:2015-04-22 20:14:14

标签: java spring jackson spring-boot

我正在使用spring-boot并希望自定义创建的ObjectMapper。

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

但是如何使用我目前正在公开的Jackson2ObjectMapperBuilder bean启用此功能呢?

3 个答案:

答案 0 :(得分:9)

您可以使用覆盖Jackson2ObjectMapperBuilder方法的configure(ObjectMapper)子类:

@Bean
public Jackson2ObjectMapperBuilder objectMapperBuilder() {
    return new Jackson2ObjectMapperBuilder() {

        @Override
        public void configure(ObjectMapper objectMapper) {
            super.configure(objectMapper);
            objectMapper.setVisibility(PropertyAccessor.FIELD, Visibility.ANY);
        }

    };

}

答案 1 :(得分:5)

如果你想通过Spring Boot提供的spring.jackson。*属性来保持ObjectMapper的可配置性,那么你最好不要定义自己的Jackson2ObjectMapperBuilder bean(详见JacksonAutoConfiguration类中的JacksonObjectMapperBuilderConfiguration)。

你可以做的是:

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

答案 2 :(得分:0)

我花了半天时间玩不同的设置。 所以我设法在以下时间(1.3.2.RELEASE)工作:

  • 我在简单@Configuration带注释的配置类中配置jackson(未从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);
 }

但这一切对我来说都很困惑。我写了一个关于所有这些魔法的任何解释的问题,以便有一些未知和解决问题而不是 试错法:Are there any Spring Boot documentation for understanding how web mvc configuration is work?