
使用 jackson 时,可通过 `@jsoninclude(jsoninclude.include.non_null)` 注解全局忽略值为 `null` 的字段,使未显式赋值的 pojo 成员不出现在最终 json 中。
在 Java Web 开发或微服务中,常使用 Jackson 将 POJO 对象序列化为 JSON 响应。但默认情况下,即使某个字段未被赋值(即保持 null),它仍会以 "fieldName": null 的形式出现在 JSON 中——这不仅冗余,还可能引发前端解析异常或违反 API 设计规范。
要彻底排除所有值为 null 的字段(包括未初始化、显式设为 null 或默认为 null 的引用类型字段),最简洁、推荐的方式是在类级别添加 Jackson 提供的 @JsonInclude 注解:
import com.fasterxml.jackson.annotation.JsonInclude;
@JsonInclude(JsonInclude.Include.NON_NULL)
public class A {
private String varOne;
private String varTwo;
// 构造函数、getter、setter(略)
}此时,若仅设置 varTwo = "hello" 而 varOne 保持 null,序列化结果为:
{"varTwo":"hello"}✅ varOne 完全不会出现在 JSON 中。
⚠️ 注意事项: @JsonInclude(JsonInclude.Include.NON_NULL) 仅对 null 值生效,对空字符串("")、0、false 等“非 null 但逻辑上为空”的值无效;如需更精细控制(如跳过空字符串),可改用 NON_EMPTY 或自定义 JsonSerializer。 该注解作用于整个类,若只需对单个字段控制,可将注解加在对应字段或 getter 方法上: @JsonInclude(JsonInclude.Include.NON_NULL) private String varOne;全局配置方式(适用于所有类):在 ObjectMapper 初始化时统一设置: ObjectMapper mapper = new ObjectMapper(); mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
综上,@JsonInclude(JsonInclude.Include.NON_NULL) 是解决“未赋值字段不输出到 JSON”问题的标准、轻量且可维护的方案,无需手动重构 JSON 字符串或引入复杂逻辑。










