Spring Boot中Jackson序列化忽略Null字段配置(无法修改导入POJO)
解决Jackson全局忽略Null值字段的方案
一、手动配置ObjectMapper(非Spring环境)
如果是自己手动创建ObjectMapper实例,直接设置序列化规则就能全局忽略null值:
ObjectMapper objectMapper = new ObjectMapper(); // 全局生效:序列化时跳过所有值为null的字段 objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
用这个ObjectMapper序列化任何POJO(包括第三方库的只读类)时,都会自动剔除null值字段,无需修改POJO源码。
二、Spring Boot/Spring MVC全局配置
如果是在Spring项目中,要让控制器返回的JSON统一忽略null值,有两种便捷方式:
方式1:配置文件快速实现
直接在application.properties或application.yml中添加全局配置:
- properties格式:
spring.jackson.default-property-inclusion=non_null
- yml格式:
spring: jackson: default-property-inclusion: non_null
这种方式零代码,Spring会自动将配置应用到全局的ObjectMapper实例,所有控制器的响应都会自动过滤null值字段。
方式2:自定义配置类(支持扩展)
如果需要搭配其他Jackson自定义规则(比如日期格式化、枚举处理),可以写一个配置类:
import com.fasterxml.jackson.annotation.JsonInclude; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder; @Configuration public class JacksonConfig { @Bean public Jackson2ObjectMapperBuilderConfigurer jacksonConfigurer() { return builder -> { // 全局设置忽略null值 builder.serializationInclusion(JsonInclude.Include.NON_NULL); // 这里可以追加其他配置,比如builder.dateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")); }; } }
也可以直接自定义ObjectMapper Bean:
import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.databind.ObjectMapper; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class JacksonConfig { @Bean public ObjectMapper objectMapper() { ObjectMapper objectMapper = new ObjectMapper(); objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); return objectMapper; } }
这两种配置都会覆盖Spring默认的ObjectMapper,全局生效处理所有POJO的序列化。
内容的提问来源于stack exchange,提问作者Hassan Raza
相关产品推荐
相关产品推荐

