我正在使用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 配置的工作原理?