Jackson JSON处理中如何忽略冗余字段?序列化多余属性解决方法
Jackson序列化时冗余
complete字段的解决方法 问题产生的核心原因
出现同时输出isComplete和complete两个同值字段的情况,通常是两个规则叠加导致的:
- 注解拼写失误:代码中使用的
@JasonProperty是错误拼写,Jackson官方提供的映射注解是@JsonProperty,拼错的注解不会被框架识别,无法起到自定义键名的作用 - Jackson默认属性识别逻辑:对于public的getter方法,框架会自动遵循JavaBean命名规范推导属性名——比如
getComplete()会被直接识别为对应JSON键complete,如果同时存在字段级的键名映射,就会形成两个独立的可序列化属性,最终输出冗余的键值对。
具体解决步骤
- 首先修正注解拼写,确保使用Jackson提供的正确
@JsonProperty注解,不要出现字母顺序错误、拼写偏差的问题 - 可根据实际代码风格选择以下任意一种方案消除冗余字段:
- 方案1:在getter、setter方法上同步标注和字段一致的
@JsonProperty("isComplete"),明确告知Jackson当前方法对应的键名是isComplete,而非自动推导的complete
参考代码:public class MyClass implements Serializable { @JsonProperty("isComplete") private Boolean complete; @JsonProperty("isComplete") public Boolean getComplete() { return this.complete; } @JsonProperty("isComplete") public void setComplete(Boolean complete) { this.complete = complete; } } - 方案2:在类级别调整Jackson的属性检测规则,关闭自动推导属性的逻辑,只识别显式标注的映射配置,从根源避免冗余属性识别
参考配置:
这种配置下,Jackson不会自动将// 关闭Jackson对getter、setter、普通字段的自动属性可见性检测 @JsonAutoDetect( getterVisibility = JsonAutoDetect.Visibility.NONE, setterVisibility = JsonAutoDetect.Visibility.NONE, fieldVisibility = JsonAutoDetect.Visibility.NONE ) public class MyClass implements Serializable { @JsonProperty("isComplete") private Boolean complete; public Boolean getComplete() { return this.complete; } public void setComplete(Boolean complete) { this.complete = complete; } }getComplete()识别为complete属性,只会按照显式标注的isComplete映射输出JSON,完全不会产生冗余字段。 - 方案3:在触发冗余识别的
getComplete()方法上搭配使用注解,让Jackson明确排除自动推导的complete属性,同时保留原有的isComplete映射
注意注解搭配时要保持属性关联一致,避免出现目标字段被一起忽略的问题。
- 方案1:在getter、setter方法上同步标注和字段一致的
内容的提问来源于stack exchange,提问作者Satyaprakash Nayak
相关产品推荐
相关产品推荐

