web-dev-qa-db-fra.com

Comment mapper les noms de champs JSON avec différents noms de champs d'objet?

Quelle est la manière équivalente dans l'annotation Jackson Json des annotations Jax-b suivantes?

J'ai besoin de produire json plutôt que xml et de connaître les annotations jackson conventionnelles notées de manière équivalente dans jax-b.

  1. renommer un champ.
  2. utilisez des accesseurs au lieu de champs.

Ces fonctionnalités sont particulièrement cruciales si le nom de l’élément json/xml est un mot réservé Java comme "new", "public", "static", etc.

Pour que nous devions nommer les champs POJO comme "_new_", "_public_", "_static_", etc., respectivement,

mais utilisez l'annotation jax-b pour les renommer en "nouveau", "public", "statique", etc., dans les éléments XML (et json) générés.

Renommer un champ

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

Redirige vers l'utilisation de la propriété getter (Je pense que c'est comme ça que ça se fait en 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_;}
}
30
Blessed Geek

C'est probablement un peu tard mais de toute façon ..

vous pouvez renommer une propriété en ajoutant simplement

@JsonProperty("contractor")

Et par défaut, Jackson utilise le getter et le setter pour sérialiser et désérialiser.

Pour plus d'informations: http://wiki.fasterxml.com/JacksonFAQ

76
Enrichman

Avec certains exemples, vous pouvez également utiliser le getter et le setter pour le renommer

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

}
0
Vijai

Veuillez noter que l'API JavaEE appropriée pour cela consiste à utiliser l'annotation javax.json.bind.annotation.JsonbProperty. Bien sûr, Jackson et d'autres ne sont que quelques implémentations de l'API JSON Binding, ils vont probablement s'y conformer.

0
Florin Asăvoaie