如何将 JSON 字段名称映射到不同的对象字段名称?

2022-08-31 20:07:31

Jackson json 注释中以下 jax-b 注释的等效方式是什么?

我需要生成 json 而不是 xml,并且需要知道在 jax-b 中等效表示的传统 jackson 注释。

  1. 重命名字段。
  2. 使用 getter 而不是字段。

如果 json/xml 元素名称是 Java 保留词(如 “”、“”、“”) 等,则这些功能尤其重要。newpublicstatic

因此,我们必须将 POJO 字段分别命名为 “_new_”、“_public_”、“_static_” 等,

但是使用jax-b注释将它们重命名为生成的XML(和json)元素中的“new”,“public”,“static”等。

重命名字段

@XmlAccessorType(XmlAccessType.FIELD)
public class Person{
    @XmlElement(required = true)
    protected String name;
    @XmlElement(required = true)
    protected String address;
    @XmlElement(name = "contractor")
    protected boolean _restricted_ ;
    @XmlElement(name = "new")
    protected boolean _new_ ;
}

重定向至使用属性 getter(我认为这是在 jax-b 中完成的方式)

@XmlAccessorType(XmlAccessType.PROPERTY)
public class Person{
    protected String name;
    protected String address;
    protected boolean _restricted_ ;
    protected boolean _new_ ;

    @XmlElement(required = true)
    protected String getName() {return name;}
    @XmlElement(required = true)
    protected String getAddress() {return address;}
    @XmlElement(name = "contractor")
    protected boolean getRestricted() {return _restricted_;}
    @XmlElement(name = "new")
    protected boolean getNew(){return _new_;}
}

答案 1

可能有点晚了,但无论如何..

您可以重命名属性,只需添加

@JsonProperty("contractor")

默认情况下,Jackson 使用 getter 和 setter 来序列化和反序列化。

有关更多详细信息,请参阅 http://wiki.fasterxml.com/JacksonFAQ


答案 2

通过一些示例,您还可以在 getter 和 setter 中使用它,以将其重命名为不同的字段

public class Sample {

    private String fruit;

    @JsonProperty("get_apple")
    public void setFruit(String fruit) {
        this.fruit = fruit;
    }

    @JsonProperty("send_apple")
    public String getFruit() {
        return fruit;
    }

}