Question

Je suis en train de permettre le support d'annotation JAXB dans mon application web basée sur RESTEasy et cet article m'a été suggéré (http://wiki.fasterxml.com/JacksonJAXBAnnotations). Je suis en mesure d'obtenir le jackson-xc.jar mais je ne vois pas comment enregistrer l'Introspector d'annotation. À l'heure actuelle, RESTEasy sérialise automatiquement mes réponses JSON, où serait l'ajustement ci-dessous? À l'heure actuelle, RESTeasy sérialise l'objet JSON automatiquement.

Inclure pot jackson-xc, qui contient org.codehaus.jackson.xc.JaxbAnnotationIntrospector Enregistrez-vous cette Introspector d'annotation

    ObjectMapper mapper = new ObjectMapper();
    AnnotationIntrospector introspector = new JaxbAnnotationIntrospector();
    // make deserializer use JAXB annotations (only)
    mapper.getDeserializationConfig().setAnnotationIntrospector(introspector);
    // make serializer use JAXB annotations (only)
    mapper.getSerializationConfig().setAnnotationIntrospector(introspector);
Était-ce utile?

La solution

Ce que vous devez savoir est comment utiliser RESTeasy ObjectMapper que vous avez configuré. JAX-RS offres de manière générique pour le faire via les fournisseurs, mais il peut être plus simple moyen (s) de le faire avec RESTeasy. Certaines implémentations JAX-RS enregistrent également une annotation JAXB Introspector par défaut.

La dernière chose: êtes-vous sûr d'avoir besoin d'utiliser les annotations JAXB? Alors que Jackson peut les utiliser, la méthode préférable est soit simplement utiliser la convention de nommage pour la découverte et propres annotations de jackson dans le cas où les remplacements sont nécessaires. Problème avec JAXB est qu'il est spécifique xml donc il y a peu d'impédance lorsqu'il est utilisé avec JSON.

Autres conseils

Merci pour la réponse, je vais jeter un oeil à vos suggestions ...

La raison pour laquelle nous voulons coller avec les annotations JAXB est que l'annotation @XmlRootElement (name = « userResponse ») permet à un élément d'emballage supplémentaire que nous voulons dans nos réponses JSON. Voir exemple ci-dessous:

Nous voulons { "réponse": { " userResponse ": [{ "utilisateur": { "businessRegion": "US", "prenom": "Joe", "langue" : "en", "lastName": "forgeron"}}}]} au lieu de ce que Jackson actuellement sorties, { "réponse": [{ "utilisateur": { "businessRegion": "US", "prenom": "Joe », "langue": "en", "lastName": "forgeron"}}]}. Y at-il de toute façon de mimer les @XmlRootElement à Jackson sans ajouter une classe enveloppe supplémentaire?

Classe d'utilisateur: @XmlAccessorType (XmlAccessType.FIELD) @XmlRootElement (name = "userResponse") UserResponse public class {étend AbstractResponse     utilisateur des utilisateurs privés;

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top