@JsonIgnore 可标注在字段、getter 或 setter 上以控制 JSON 序列化行为:标字段最常用,完全忽略;标 getter 仅忽略序列化;标 setter 仅忽略反序列化;配合 @JsonIgnoreProperties 可批量忽略。

在 Java 中,用 @JsonIgnore 忽略某个属性的 JSON 序列化,只需把它加在对应字段、getter 或 setter 方法上即可。Jackson 会跳过被标注的属性,不将其写入 JSON 字符串。
加在字段上(最常用)
直接标注在类的私有字段上,简洁直观,适用于大多数场景:
public class User {
private String name;
@JsonIgnore
private String password; // 序列化时不会出现
private int age;
}
这样,调用 ObjectMapper.writeValueAsString(user) 时,password 字段完全不会出现在生成的 JSON 中。
加在 getter 方法上(控制读取行为)
如果只想在序列化(即“写出”JSON)时忽略,但反序列化(从 JSON 构建对象)仍允许设置该字段,可标注在 getter 上:
立即学习“Java免费学习笔记(深入)”;
- 仅影响序列化,不影响反序列化
- 适合敏感字段需写入但不希望暴露的情况
public class User {
private String password;
public String getPassword() {
return password;
}
@JsonIgnore
public void setPassword(String password) {
this.password = password;
}
}
注意:标注在 setter 上会影响反序列化;标注在 getter 上只影响序列化。
加在 setter 方法上(控制写入行为)
若希望该字段能被序列化,但禁止从 JSON 反序列化时设值(比如只读字段),就标注在 setter 上:
- JSON 转对象时跳过该 setter,字段保持默认值或原有值
- 序列化时仍会输出该字段(除非 getter 也被忽略)
public class User {
private String id = "auto-generated";
public String getId() {
return id;
}
@JsonIgnore
public void setId(String id) {
this.id = id;
}
}
这样,JSON 解析时不会覆盖 id,但序列化结果里仍有 "id":"xxx"。
配合 @JsonIgnoreProperties 使用更灵活
若要批量忽略多个字段,可在类上用 @JsonIgnoreProperties,避免重复标注:
@JsonIgnoreProperties({"password", "token", "createdAt"})
public class User {
private String name;
private String password;
private String token;
private LocalDateTime createdAt;
}
它等价于给这三个字段都加上 @JsonIgnore,且支持运行时动态排除(通过 value 或 allowSetters 等参数微调)。


















