
使用 jackson 时,可通过 `@jsoninclude(jsoninclude.include.non_null)` 注解全局或局部控制字段序列化行为,使值为 `null` 的字段不输出到 json 中,从而避免未显式赋值的字段以 `"fieldname": null` 形式出现。
在基于 Jackson 的 Java Web 开发中,POJO 转 JSON 时默认会将所有字段(包括未初始化或显式设为 null 的字段)一并序列化,例如:
public class A {
private String varOne;
private String varTwo = "assigned";
}若仅设置 varTwo,而 varOne 保持默认 null,默认序列化结果为:
{"varOne":null,"varTwo":"assigned"}这不仅冗余,还可能干扰前端逻辑或 API 兼容性。
✅ 推荐解决方案:使用 @JsonInclude 注解
方式一:类级别控制(推荐,简洁且可复用)
在 POJO 类上添加注解,使该类所有 null 值字段均被忽略:
import com.fasterxml.jackson.annotation.JsonInclude;
@JsonInclude(JsonInclude.Include.NON_NULL)
public class A {
private String varOne;
private String varTwo = "assigned";
// getters & setters (required for Jackson)
}此时序列化结果变为:
{"varTwo":"assigned"}✅ varOne 完全不出现,符合“未赋值即不输出”的需求。
方式二:全局配置(适用于整个应用)
在 ObjectMapper 初始化时统一设定(如 Spring Boot 中):
@Bean
public ObjectMapper objectMapper() {
return new ObjectMapper()
.setSerializationInclusion(JsonInclude.Include.NON_NULL);
}⚠️ 注意事项:
- @JsonInclude 仅对 null 值生效;若字段是基本类型(如 int、boolean),其默认值(0、false)仍会输出,需改用包装类型(Integer、Boolean)配合 NON_NULL 才能跳过。
- 若需更精细控制(如忽略空字符串、空集合),可选用 NON_EMPTY 或自定义 JsonSerializer。
- 该注解不影响反序列化行为——JSON 中缺失字段仍会被正确设为 null(除非配置了 @JsonSetter(nulls = Nulls.SKIP))。
? 总结:@JsonInclude(JsonInclude.Include.NON_NULL) 是最轻量、标准且符合 Jackson 最佳实践的方式,无需手动构建 JSON 或反射过滤,既安全又可维护。










