【问题标题】:jackson - avoid serializing gettersjackson - 避免序列化 getter
【发布时间】:2021-02-09 21:18:37
【问题描述】:

我有一个类,它有一些用于派生值的额外 getter。当我用杰克逊 objectmapper 序列化它时,它也会写出该字段。有没有办法避免这种情况?

例子-

public class CustomPath implements Serializable {

private String path;
private String name;
private String extension = ".txt";

@JsonCreator(mode = JsonCreator.Mode.PROPERTIES)
public CustomPath(@JsonProperty("path") String path, @JsonProperty("name") String name) {
this.path = path;
this.name = name;
}

public String getPath()
{ return this.path;}

public void setPath(String path)
{ this.path = path;}

public String getName()
{ return this.name;}

public void setName(String name)
{ this.name = name;}


public String getExtension()
{ return this.extension;}

public void setExtension(String extension)
{ this.extension = extension;}

public String getFullPath() //do not want to serialize this
{ return this.path +"/" + this.name + this.extension;}

}

这样的类的 json 看起来像 -

{
   path: somepath
   name: somename
   extension: .txt
   fullPath: somepath/somename.txt

}

但我不想在上面的示例中序列化“fullPath”。有什么办法可以避免吗?

【问题讨论】:

    标签: json jackson json-serialization


    【解决方案1】:

    你需要用@JsonIgnore注释getFullPath()方法:

    @JsonIgnore
    public String getFullPath() // do not want to serialize this
    {
        return this.path + "/" + this.name + this.extension;
    }
    

    那么 JSON 输出将如下所示:

    {
      "path" : "somePath",
      "name" : "someName",
      "extension" : ".txt"
    }
    

    【讨论】:

    • 感谢@Thomas Fritsch 的快速回复。我实际上尝试过,但我仍然在我的序列化 json 中看到它。我需要在对象映射器上进行任何设置以尊重该注释吗?谢谢。
    • @nit 这应该可以在没有ObjectMapper 的任何额外配置的情况下工作。 .实际上我已经在您发布的代码中添加了@JsonIgnore,并对其进行了测试,对我来说它工作正常。
    • 这确实有效。我有另一种方法,它从另一个需要注释的类返回它。非常感谢!!
    猜你喜欢
    • 1970-01-01
    • 2012-04-28
    • 2016-09-08
    • 2018-09-04
    • 2020-10-20
    • 2012-04-21
    • 2014-03-09
    • 2016-02-06
    • 1970-01-01
    相关资源
    最近更新 更多