首页 文章

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

提问于
浏览
31

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

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

  • 重命名一个字段 .

  • 使用getter而不是字段 .

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

因此,我们必须将POJO字段分别命名为“new”,“_ public ”,“ static_”等,

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

Renaming a field

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

Redirect to using property 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_;}
}

3 回答

  • 0

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

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

    @JsonProperty("contractor")
    

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

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

  • 0

    通过一些示例,您还可以使用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;
        }
    
    }
    
  • 76

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

相关问题