You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot 2.5.4全局Jackson序列化non_null配置未生效问题排查

问题根本原因

你遇到的情况核心原因是Spring MVC处理接口响应时使用的序列化组件,没有加载你配置的Jackson全局规则,结合你给出的调试信息(手动注入ObjectMapper序列化生效、全局配置已加载到Jackson auto config中),常见的触发场景有以下几个,按出现概率从高到低排列:

1. 项目中使用了@EnableWebMvc注解

只要你在任意配置类/启动类上加了@EnableWebMvc,就会完全接管Spring MVC的配置,Spring Boot默认的Web自动配置(包括Jackson消息转换器的自动注入)会全部失效,你在yml或者自定义ObjectMapper的配置都不会被Spring MVC的消息转换器读取。

解决方法:直接删除所有@EnableWebMvc注解即可,Spring Boot 2.x 无需手动添加该注解就能启用完整的Web能力。

2. 自定义WebMvc配置时重写了configureMessageConverters方法

如果你自己实现了WebMvcConfigurer接口,并且重写了configureMessageConverters方法,该方法默认会清空Spring Boot自动配置的所有消息转换器,如果你没有手动把配置好的Jackson消息转换器加到列表中,就会使用默认无全局规则的Jackson序列化能力。

解决方法:将configureMessageConverters方法替换为extendMessageConverters方法,该方法只会在默认的转换器列表基础上追加你自定义的转换器,不会覆盖原有配置。如果必须使用configureMessageConverters,需要手动把配置了NON_NULL规则的ObjectMapper对应的消息转换器添加到转换器列表首位。

3. 项目中引入了其他JSON序列化库

如果你的项目依赖里引入了fastjson、gson等其他JSON序列化库的starter,Spring Boot会自动配置对应库的消息转换器,且优先级高于默认的Jackson转换器,此时接口响应序列化根本没有用到Jackson,你配置的Jackson规则自然不会生效。

解决方法:要么排除其他JSON库的自动配置,要么调整消息转换器的优先级,给你自定义的MappingJackson2HttpMessageConverter Bean加上@Order(Ordered.HIGHEST_PRECEDENCE)注解,确保它是第一个被匹配到的序列化转换器。

4. 自定义消息转换器优先级不足

如果你已经配置了自定义的MappingJackson2HttpMessageConverter,但没有设置优先级,可能被后续加载的其他同类型转换器覆盖了规则。

解决方法:给自定义的消息转换器Bean加上最高优先级注解:

@Bean
@Order(Ordered.HIGHEST_PRECEDENCE)
public MappingJackson2HttpMessageConverter messageMappingConverter() {
    final var om = new ObjectMapper();
    om.setSerializationInclusion(Include.NON_NULL);
    return new MappingJackson2HttpMessageConverter(om);
}

内容的提问来源于stack exchange,提问作者niklasfi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 00:36:02