为何Jackson序列化Java类会输出多余"empty": false字段,如何移除?
问题原因
出现多余"empty": false字段的核心原因有两个:
- 你的
AdditionalFields类中存在符合JavaBean getter命名规则的public boolean isEmpty()方法(你贴出的代码只展示了属性部分,漏了类的方法实现),Jackson默认会自动序列化所有无参public getter方法的返回值,该方法没有对应类属性,所以你加在类和属性上的@JsonInclude注解对这个字段不生效。 JsonInclude.Include.NON_EMPTY的空值判定规则不包含boolean类型的false值,所以就算你配置了全局NON_EMPTY序列化规则,也不会过滤掉这个false值的字段。
解决方案
任选其中一种即可:
- 方案1:在
isEmpty()方法上添加@JsonIgnore注解,直接让Jackson忽略该方法的序列化。
@JsonIgnore public boolean isEmpty() { // 你的原有逻辑 }
- 方案2:在
AdditionalFields类上添加@JsonIgnoreProperties("empty")注解,直接指定忽略empty字段的序列化,不需要修改原有方法。
@JsonInclude(JsonInclude.Include.NON_EMPTY) @JsonIgnoreProperties("empty") @JsonPropertyOrder({/* 原有顺序 */}) public class AdditionalFields { // 原有代码 }
- 方案3:如果这个
isEmpty方法是你引入的第三方父类/接口自带的、无法修改,也可以在序列化的ObjectMapper上配置全局忽略指定字段,前两种方案更简单直接。
内容的提问来源于stack exchange,提问作者conteh
相关产品推荐
相关产品推荐

