web-dev-qa-db-ja.com

JSONフィールド名を異なるオブジェクトフィールド名にマッピングする方法は?

次のjax-bアノテーションのJackson jsonアノテーションの同等の方法は何ですか?

Xmlではなくjsonを作成する必要があり、jax-bで同等に示される従来のjacksonアノテーションを知る必要があります。

  1. フィールドの名前を変更します。
  2. フィールドの代わりにゲッターを使用します。

これらの機能は、json/xmlエレメント名がJava "new"、 "public"、 "static "など.

POJOフィールドにそれぞれ「_new _」、「_ public _」、「_ static_」などの名前を付ける必要があるため、

ただし、生成されたXML(およびjson)要素では、jax-bアノテーションを使用して名前を「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_ ;
}

プロパティゲッターの使用にリダイレクト(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_;}
}
36
Blessed Geek

おそらく少し遅いですが、とにかく..

追加するだけでプロパティの名前を変更できます

@JsonProperty("contractor")

デフォルトでは、Jacksonはgetterとsetterを使用してシリアル化と逆シリアル化を行います。

詳細情報: http://wiki.fasterxml.com/JacksonFAQ

84
Enrichman

いくつかの例では、ゲッターとセッターで使用して別のフィールドに名前を変更することもできます

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

}
2
Vijai

このための適切なJavaEE APIはjavax.json.bind.annotation.JsonbProperty注釈。もちろん、JacksonなどはJSON Binding APIの単なる実装であり、おそらくこれに準拠しています。

2