【问题标题】:What is the use of @JsonIgnore and @Xmltransient?@JsonIgnore 和 @Xmltransient 有什么用?
【发布时间】:2016-12-09 04:41:50
【问题描述】:
@JsonIgnore 
@Xmltransient
private int id

我想通过一些示例来了解在某些属性/字段@JsonIgnore@Xmltransient 之上使用这两个注释的目的。

我已经浏览了不同的网站。

【问题讨论】:

标签: json jackson jaxb


【解决方案1】:
  • @XmlTransient 是一个 JAXB 注释,指示编组器忽略字段/属性。
  • @JsonIgnore 是 Jackson 的专有注解,用于指示 Jackson 忽略字段/属性。

由于问题询问@JsonIgnore,我假设您正在寻找Jackson 如何使用它们。使用哪个注解取决于您在 ObjectMapper 中使用的 AnnotationIntrospector

没有@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" 
}

【讨论】:

    猜你喜欢
    • 2021-03-28
    • 2017-07-07
    • 1970-01-01
    • 2020-02-02
    • 2015-07-15
    • 2014-07-14
    • 1970-01-01
    • 2013-09-01
    • 2014-08-19
    相关资源
    最近更新 更多