Java中Jackson的@JsonIgnore注解无法隐藏字段问题咨询
问题原因
- 注解配置不匹配:Jackson默认基于public getter方法执行序列化逻辑,你仅在private的
id字段上添加了@JsonIgnore注解,而旧版本Jackson(你使用的2.4.4版本)不会自动将字段上的忽略注解关联到对应的getId()方法,因此序列化时依然会读取getId()的返回值输出到JSON中。 - 依赖版本冲突:你使用的Jersey 2.31内置的Jackson版本远高于2.4.4,手动引入的低版本Jackson和Jersey自带的版本发生冲突,会导致注解无法被正确识别生效。
解决方案
- 直接在
getId()方法上添加@JsonIgnore注解,这是适配所有Jackson版本的稳妥方案,修改后代码如下:
@JsonIgnore public final BigDecimal getId() { return id; }
修改后序列化JSON时会自动隐藏id字段,同时你在业务代码中依然可以正常调用getId()方法获取id值,满足其他场景的使用需求。类上的@JsonIgnoreProperties(value = {"id"})和字段上的@JsonIgnore可以按需保留或删除,不影响最终效果。
2. 修复依赖冲突:可以将jackson.version升级到2.10+的兼容版本,和Jersey 2.31的依赖对齐;也可以排除Jersey中自带的Jackson相关依赖,避免多版本共存导致的异常。
内容的提问来源于stack exchange,提问作者Deividas.r
相关产品推荐
相关产品推荐

