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
- 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();
}
- 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.