Jackson2ObjectMapperBuilder启用字段可见性ANY

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

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

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

您可以使用覆盖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.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); } 

但这一切对我来说都很困惑。 我写了一个关于所有这些魔法的任何解释的问题,以便通过反复试验方法得到一些未知和解决问题: 是否有任何Spring Boot文档用于理解web mvc配置是如何工作的?