Jackson2ObjectMapperBuilder 启用任何字段可见性
Jackson2ObjectMapperBuilder enable field visibility ANY
我正在使用 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.jackson.* Boot 提供的属性保持 ObjectMapper 的可配置性,那么您最好不要定义自己的 Jackson2ObjectMapperBuilder bean(检查 JacksonAutoConfiguration 中的 JacksonObjectMapperBuilderConfiguration class 了解详情)。
你可以做的是:
@Bean
public ObjectMapper objectMapper(Jackson2ObjectMapperBuilder mapperBuilder) {
return mapperBuilder.build().setVisibility(PropertyAccessor.FIELD, Visibility.ANY);
}
我花了半天时间玩不同的设置。
所以我设法在 (1.3.2.RELEASE) 时工作:
- 我在简单的
@Configuration
注释配置 class 中配置 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?
我正在使用 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.jackson.* Boot 提供的属性保持 ObjectMapper 的可配置性,那么您最好不要定义自己的 Jackson2ObjectMapperBuilder bean(检查 JacksonAutoConfiguration 中的 JacksonObjectMapperBuilderConfiguration class 了解详情)。
你可以做的是:
@Bean
public ObjectMapper objectMapper(Jackson2ObjectMapperBuilder mapperBuilder) {
return mapperBuilder.build().setVisibility(PropertyAccessor.FIELD, Visibility.ANY);
}
我花了半天时间玩不同的设置。 所以我设法在 (1.3.2.RELEASE) 时工作:
- 我在简单的
@Configuration
注释配置 class 中配置 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?