Comment mapper champ JSON noms de différents noms de champ d'objet?
Quel est le equiv façon Jackson json annotation pour la suite de jax-b annotations?
J'ai besoin pour produire json plutôt que xml et le besoin de connaître les classiques jackson annotations qui est, de manière équivalente notée dans jax-b.
- renommer un champ.
- utiliser les méthodes de lecture au lieu de champs.
Ces fonctionnalités sont particulièrement crucial si le json/xml nom de l'élément est un mot réservé java
comme "new
", "public
", "static
", etc.
De sorte que nous devons nommer le POJO champs "_new_", "_public_", "_static_", etc, respectivement,
mais l'utilisation de jax-b annotation de les renommer en "nouvelle", "public", "statique", etc
dans le XML généré (et json) éléments.
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_ ;
}
De redirection à l'aide de la propriété de lecture (je pense que c'est la façon dont c'est fait dans 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_;}
}
- Ne
@XmlElement(name = "new")
fonctionne pas pour vous? Je l'ai juste essayé sur un Maillot de servlet (qui utilise Jackson) et il a bien fonctionné. - Je suis à l'aide de RestyGWT - je pense que la fonctionnalité n'est pas trouvé dans RestyGWT et donc j'ai besoin de savoir le jackson equiv avant de tenter/propose de soumettre un patch.
- Merci @BlessedGeek pour l'astuce. Plus d'informations peuvent être trouvées à l'adresse wiki.fasterxml.com/AnnotationIntrospector en Dépit de la méthode dans le lien est un peu vieux, je suis en utilisant ce code pour définir la priorité de la sérialiseur/deserializer. objectMapper.setAnnotationIntrospector( nouveau AnnotationIntrospectorPair( nouveau JacksonAnnotationIntrospector(), new JaxbAnnotationIntrospector() ) );
Vous devez vous connecter pour publier un commentaire.
Probablement, il est un peu tard mais de toute façon..
vous pouvez renommer une propriété simplement l'ajout d'
Et par défaut Jackson utiliser les getter et setter pour sérialiser et désérialiser.
Pour de plus amples informations: http://wiki.fasterxml.com/JacksonFAQ
@JsonProperty(value = "json_Name") @XmlElement(name = "name_provider") public String getName() { return name; }
mais de toute façon ma valeur du nom est name_provider, et non json_NameAvec quelques exemples, Vous pouvez aussi l'utiliser en il getter et setter pour renommer un champ différent
Veuillez noter que le bon JavaEE API pour cela est d'utiliser la
javax.json.bind.annotation.JsonbProperty
annotation. Bien sûr, Jackson et d'autres sont juste certaines implémentations du JSON de Liaison API, ils seront susceptibles de se conformer à la présente.