Implémentation d'une représentation JSON d'une ressource avec des objets annotés Jackson et JAXB

Vous pouvez traiter les demandes et les réponses JSON (JavaScript Object Notation) en utilisant des objets annotées JAXB (Java™ Architecture for XML Binding) et Jackson. Jackson est le processeur JSON par défaut dans WebSphere Application Server. Il est inclus par défaut dans l'environnement d'exécution JAX-RS, vous n'avez donc pas besoin de configurer Jackson.

Pourquoi et quand exécuter cette tâche

Cette tâche fournit des instructions sur le traitement des demandes et des réponses JSON avec des objets annotés JAXB et Jackson.

Procédure

  1. Créez une méthode de ressource. Pour que la méthode de ressource renvoie le contenu JSON, renvoyez une instance de classe JAXB directement ou un objet javax.ws.rs.core.Response avec un objet JAXB comme entité de réponse. Vous devez également ajouter une annotation @Produces("application/json") ou définir l'en-tête Content-Type de l'objet Response avec la valeur "application/json". L'exemple suivant illustre des méthodes simples de renvoi de contenu JSON pour la classe JAXB BookList :
    @GET
    @Produces("application/json")
    public BookList getBookList() {
        BookList list = /* get a book list */
        return list;
    }
    ou
    @GET
    @Produces("application/json")
    public javax.ws.rs.core.Response getBookList() {
        BookList list = /* get a book list */
        return Response.ok(list).type(MediaType.APPLICATION_JSON_TYPE).build();
    }
  2. Si vous souhaitez renvoyer des objets XML et JSON, vous pouvez réutiliser la même méthode avec une modification minimale. Vous devez spécifier "application/xml", "application/json" et "text/xml" dans l'annotation @Produces. L'exemple suivant illustre une méthode simple de renvoi de contenu JSON qui permet de renvoyer un objet BookList pour la classe JAXB BookList :
    @GET
    @Produces("application/json", "application/xml", "text/xml")
    public BookList getBookList() {
        BookList list = /* get a book list */
        return list;
    }
    L'exemple suivant illustre une méthode simple de renvoi de contenu JSON qui permet de renvoyer un objet javax.ws.rs.core.Response pour la classe JAXB BookList :
    @GET
    @Produces("application/json", "application/xml", "text/xml")
    public javax.ws.rs.core.Response getBookList() {
        BookList list = /* get a book list */
        return Response.ok(list).build();
    }
    Une négociation de contenu via l'en-tête HTTP Accept de la demande client détermine si une représentation JSON ou XML est renvoyée par la méthode de ressource. Pour plus d'informations, consultez la documentation relative à la négociation de contenu. En réutilisant les objets annotés JAXB, vous pouvez réduire la durée du développement pour gérer à la fois le contenu JSON et XML à partir du même code. Il peut être avantageux de réutiliser le même code de modèle si aucune sortie JSON ou XML formatée spécifique n'est requise.

    Si vous exigez une sortie XML et JSON spécifique et que vous ne pouvez pas réutiliser les mêmes classes annotées JAXB, vous pouvez résoudre le problème en utilisant deux méthodes de ressource différentes. La méthode de ressource JSON doit comporter une annotation @Produces("application/json") et la méthode de ressource XML doit comporter une annotation @Produces("application/xml", "text/xml").

Résultats

Vous avez renvoyé une représentation JSON avec des classes annotées JAXB via le processeur JSON Jackson.


Icône indiquant le type de rubrique Rubrique de tâche



Icône d'horodatage Dernière mise à jour: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=twbs_jaxrs_jsoncontent_jaxb_annotated_objs
Nom du fichier : twbs_jaxrs_jsoncontent_jaxb_annotated_objs.html