gpt4 book ai didi

json - @JsonIgnore 和 @Xmltransient 有什么用?

转载 作者:行者123 更新时间:2023-12-04 01:49:50 28 4
gpt4 key购买 nike

@JsonIgnore 
@Xmltransient
private int id

我想了解在某些属性/字段 @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;
    }
    }

    示例 jackson 输出:
    {
    firstName: "Jay",
    lastName: "Unit",
    userName: "Jay_Unit"
    }

    jackson 承认 userName作为属性(property),因为 getUserName()看起来像一个字段访问器。在这种情况下, getUserName()包含用于构造 userName 属性的业务逻辑,并且可能需要将其包含在生成的 json 中。但是,如果您不需要 userName 属性或者 json 将被解码回 User上课,发送 userName过线是浪费。您可以使用 @XmlTransient 或 @JsonIgnore 来防止 Jackson 对字段进行编码。

    示例与 @XmlTransient属性(property):
    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;
    }
    }

    示例 jackson 输出:
    {
    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;
    }
    }

    示例 jackson 输出:
    {
    userName: "Jay_Unit"
    }

    关于json - @JsonIgnore 和 @Xmltransient 有什么用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41053240/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com