@JsonIgnore
@Xmltransient
private int id
我想了解在某些属性/字段@JsonIgnore
&之上使用这两个注释的目的。 @Xmltransient
有一些例子。
我已经浏览过不同的网站。
答案 0 :(得分:4)
@XmlTransient
是一个JAXB批注,用于向编组发送信号以忽略字段/属性。@JsonIgnore
是Jackson的专有注释,指示Jackson忽略字段/属性。由于这个问题询问的是@JsonIgnore
,所以我假设您正在寻找Jackson如何使用它们。使用哪个注释取决于您与ObjectMapper一起使用哪个AnnotationIntrospector
。
@XmlTransient
由JaxbAnnotationIntrospector
读取,它试图在编组到json期间遵循JAXB注释。@JsonIgnore
由JacksonAnnotationIntrospector
读取,后者读取用于编组的标准Jackson注释。 不带@XmlTransient
的示例:
public class User
{
private String firstName;
private String lastName;
public String getFirstName() { return firstName; }
public void setFirstName(String firstName) { this.firstName = firstName; }
public String getLastName() { return lastName; }
public void setLastName(String lastName) { this.lastName = lastName; }
public String getUserName()
{
return firstName + "_" + lastName;
}
}
杰克逊输出示例:
{
firstName: "Jay",
lastName: "Unit",
userName: "Jay_Unit"
}
Jackson将userName
识别为属性,因为getUserName()
看起来像字段访问器。在这种情况下,getUserName()
包含用于构造userName属性的业务逻辑,可能需要将其包含在结果json中。但是,如果不需要userName属性,或者将json解组到User
类中,则通过网络发送userName
是浪费的。您可以使用@XmlTransient或@JsonIgnore阻止Jackson整理字段。
属性为@XmlTransient
的示例:
public class User
{
private String firstName;
private String lastName;
public String getFirstName() { return firstName; }
public void setFirstName(String firstName) { this.firstName = firstName; }
public String getLastName() { return lastName; }
public void setLastName(String lastName) { this.lastName = lastName; }
@XmlTransient
public String getUserName()
{
return firstName + "_" + lastName;
}
}
杰克逊输出示例:
{
firstName: "Jay",
lastName: "Unit"
}
在字段上带有@JsonIgnore
的示例:
public class User
{
@JsonIgnore
private String firstName;
@JsonIgnore
private String lastName;
public String getFirstName() { return firstName; }
public void setFirstName(String firstName) { this.firstName = firstName; }
public String getLastName() { return lastName; }
public void setLastName(String lastName) { this.lastName = lastName; }
public String getUserName()
{
return firstName + "_" + lastName;
}
}
杰克逊输出示例:
{
userName: "Jay_Unit"
}