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.

  1. renommer un champ.
  2. 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() ) );
InformationsquelleAutor Blessed Geek | 2012-03-16