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配置是如何工作的?