JsonIgnore on Field vs JsonIgnore on Jackson领域的吸气剂

时间:2018-07-23 21:01:04

标签: java java-8 jackson jackson2

Jackson中的JsonIgnore和Field的JsonIgnore有何区别?

2 个答案:

答案 0 :(得分:2)

@JsonIgnore批注用于忽略反序列化和序列化中的字段,可以将其直接放在实例成员或其getter或setter上。在这3个点中的任何一个点上应用注释,都会导致该属性从序列化和反序列化过程中完全排除(这从Jackson 1.9开始适用;这些示例中使用的版本是Jackson 2.4.3)。

注意::在1.9版之前,此注释完全基于方法(或逐字段)进行;一个方法或字段上的注释并不意味着忽略其他方法或字段

示例

 import java.io.IOException;

 import com.fasterxml.jackson.annotation.JsonIgnore;
 import com.fasterxml.jackson.core.JsonParseException;
 import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.databind.JsonMappingException;
 import com.fasterxml.jackson.databind.ObjectMapper;

 class MyTestClass {

 private long id;
 private String name;
 private String notInterstingMember;
 private int anotherMember;
 private int forgetThisField;

 public long getId() {
    return this.id;
 }

 public void setId(long id) {
     this.id = id;
 }

 public String getName() {
     return this.name;
 }

 public void setName(String name) {
    this.name = name;
 }

 @JsonIgnore
 public String getNotInterstingMember() {
    return this.notInterstingMember;
 }

 public void setNotInterstingMember(String notInterstingMember) {
    this.notInterstingMember = notInterstingMember;
 }

 public int getAnotherMember() {
    return this.anotherMember;
 }

 public void setAnotherMember(int anotherMember) {
    this.anotherMember = anotherMember;
 }

 public int getForgetThisField() {
    return this.forgetThisField;
 }

 @JsonIgnore
 public void setForgetThisField(int forgetThisField) {
    this.forgetThisField = forgetThisField;
 }

 @Override
 public String toString() {
    return "MyTestClass [" + this.id + " , " +  this.name + ", " + this.notInterstingMember + ", " + this.anotherMember + ", " + this.forgetThisField + "]";
    }

  }

输出:

 {"id":1,"name":"Test program","anotherMember":100}
 MyTestClass [1 , Test program, null, 100, 0]

但是仍然可以更改此行为并使其不对称,例如,仅使用@JsonIgnore批注和另一个称为@JsonProperty.

的反序列化将属性排除在反序列化之外

答案 1 :(得分:1)

据我所知,两者之间没有区别。 @JsonIgnore JavaDocs似乎在各个地方都可以互换使用。

但是,如果您有不会产生副作用的吸气剂,并且希望无论出于何种原因最终希望将lombok之类的东西合并到您的项目中,如果将@JsonIgnore放在领域。此外,对于IMO,将这种反序列化信息放在定义参数的位置(即字段本身)要清楚得多。