@JsonIgnore
@Xmltransient
private int id
Run Code Online (Sandbox Code Playgroud)
我想了解使用的一些属性/字段的顶部这两个注释的目的@JsonIgnore和@Xmltransient一些示例。
我已经浏览了不同的网站。
@XmlTransient 是一个 JAXB 注释,它向编组器发出信号以忽略字段/属性。@JsonIgnore 是专有的 Jackson 注释,指示 Jackson 忽略字段/属性。由于问题询问的是@JsonIgnore我假设您正在寻找Jackson是如何使用它们的。使用哪个注解取决于AnnotationIntrospector您使用 ObjectMapper 的注解。
@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;
}
}
Run Code Online (Sandbox Code Playgroud)
示例杰克逊输出:
{
firstName: "Jay",
lastName: "Unit",
userName: "Jay_Unit"
}
Run Code Online (Sandbox Code Playgroud)
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;
}
}
Run Code Online (Sandbox Code Playgroud)
示例杰克逊输出:
{
firstName: "Jay",
lastName: "Unit"
}
Run Code Online (Sandbox Code Playgroud)
带有@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;
}
}
Run Code Online (Sandbox Code Playgroud)
示例杰克逊输出:
{
userName: "Jay_Unit"
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2289 次 |
| 最近记录: |