如何获取经Jackson2ObjectMapperBuilderCustomizer自定义的ObjectMapper?
实现方案
你当前定义的Jackson2ObjectMapperBuilderCustomizer Bean本身就会自动作用于Spring Boot自动装配的ObjectMapper实例,只要满足以下条件,直接在业务代码中@Autowired ObjectMapper就能拿到应用了自定义规则的实例:
- 你的自定义
Jackson2ObjectMapperBuilderCustomizer所在的类添加了@Configuration注解,且被纳入Spring的组件扫描范围 - 没有手动声明自定义的
ObjectMapperBean:如果你在配置类中自己写了@Bean public ObjectMapper objectMapper()的硬编码实现,Spring Boot的自动装配逻辑会失效,自定义的Customizer也不会作用于你手动创建的实例
如果你的项目确实需要手动声明ObjectMapper Bean,可以通过Jackson2ObjectMapperBuilder来构建,这样所有注册的Customizer规则都会自动生效,示例代码如下:
@Bean public ObjectMapper objectMapper(Jackson2ObjectMapperBuilder builder) { // 可在此处追加额外个性化配置,不会覆盖已注册的Customizer规则 return builder.build(); }
注意:如果你同时自定义了Spring MVC的HTTP消息转换器,不要在自定义
MappingJackson2HttpMessageConverter时手动new新的ObjectMapper实例,直接注入容器中自动装配的ObjectMapper传入即可,保证Web层和业务代码的Jackson规则统一。
配置生效校验
注入ObjectMapper后可以通过以下代码快速验证规则是否生效:
// 校验序列化空值排除规则是否生效 System.out.println(objectMapper.getSerializationConfig().getDefaultPropertyInclusion().getValueInclusion()); // 校验自定义注解解析器是否生效 System.out.println(objectMapper.getSerializationConfig().getAnnotationIntrospector().getClass().getName());
内容的提问来源于stack exchange,提问作者Zhenyria
相关产品推荐
相关产品推荐

