我正在使用spring-boot并希望自定义创建的ObjectMapper。
我想要做的是能够序列化没有getter或setter的对象。在此之前可以通过在ObjectMapper上放置JsonAutoDetect.Visibility.ANY来完成。
但是如何使用我目前正在公开的Jackson2ObjectMapperBuilder bean启用此功能呢?
答案 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?