当前位置: 首页 > 知识库问答 >
问题:

@jsonIgnore行为

闻人飞翼
2023-03-14

在处理一个项目时,我犯了一个错误,将@jsonIgnore放在setter而不是getter属性上,如下所示

private Set<Book> books;  


public Set<Book> getBooks() {
    return books;
}

@JsonIgnore
public void setBooks(Set<Book> books) {
    this.books = books;
}

这是@jsonIgnore正常工作的方式吗?我以为只在getter上设置@jsonignore可以防止序列化。在这里,它阻止了序列化,即使我把它放在getter或setter上。

感谢任何建议。多谢了。

共有1个答案

养翔
2023-03-14

来自javadoc(重点是我的):

此外,从Jackson 1.9开始,如果这是唯一一个与属性关联的注释,那么也会导致整个属性被忽略:也就是说,如果setter有这个注释而getter没有注释,那么getter也会有效地被忽略。不同的访问者使用不同的注释还是有可能的;因此,如果只忽略“getter”,其他访问器(setter或field)将需要显式注释来防止无知(通常是jsonproperty)。

 类似资料:
  • 我必须在其他类中使用的所有set和get方法,所以我不能删除一个方法。当我召唤 它提示异常,jackon不知道设置了哪个方法,所以我使用了@jsonignore,但我发现receive是null。

  • 问题内容: 编辑:现在更具体,我注意到我想在下面使用两个依赖项的冲突: 基本上,我试图忽略一个属性(@JsonIgnore),但是我的Jackson注释都没有起作用。甚至@JsonProperty。我试图在getters和setters方法中添加@JsonIgnore,但是行为相同。 我还尝试遵循官方文档,并尝试使用其他库 导入org.codehaus.jackson.annotate.JsonI

  • 我怎么才能让@JsonIgnore工作呢?我有课。即使我把注释放在那里,它对输出也没有影响。我在用杰克逊。 这是我的控制器方法: 这是我的servlet-context.xml:

  • 我正在使用Spring boot开发应用程序,我只想在返回客户端时忽略一个字段,但一个endpoint除外。 如何仅为一个endpoint向客户端公开jwt?谢谢

  • 我可以在lombok中使用@JsonIgnore和@getter注释,而不显式定义getter,因为我必须在序列化对象时使用这个JsonIgnore,但是在反序列化时,JsonIgnore注释必须是ignore,所以对象中的字段不能为空。 我知道,只要在password的getter上定义JsonIgnore就可以防止我的密码被序列化,但为此我必须显式定义我不想要的getter。任何建议,任何帮助