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

问题描述 投票:32回答:3

对于以下jax-b注释,Jackson json注释中的等价方式是什么?

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

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

如果json / xml元素名称是“new”,“public”,“static”等java保留字,则这些功能尤其重要。

因此,我们必须将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_;}
}
java xml json annotations jackson
3个回答
84
投票

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

您可以重命名只添加的属性

@JsonProperty("contractor")

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

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


2
投票

请注意,适当的JavaEE API是使用javax.json.bind.annotation.JsonbProperty注释。当然,Jackson和其他人只是JSON Binding API的一些实现,他们可能会遵守这一点。


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;
    }

}
© www.soinside.com 2019 - 2024. All rights reserved.