Retour JSONArray au lieu de JSONObject, Maillot de JAX-RS
Je suis en utilisant Jersey à faire certains de mes services RESTful.
Mon REPOS appel de service me renvoie
{"param1":"value1", "param2":"value2",...."paramN":"valueN"}
Mais, je veux qu'il revienne
["param1":"value1", "param2":"value2",...."paramN":"valueN"]
Quels sont les changements que j'ai besoin de faire dans le code ci-dessous?
@GET
@Produces(MediaType.APPLICATION_JSON)
public List<com.abc.def.rest.model.SimplePojo> getSomeList() {
/*
Do something
*/
return listOfPojos;
}
Partie de mon web.xml fichier ressemble à ceci
<servlet>
<servlet-name>Abc Jersey REST Service</servlet-name>
<servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>com.sun.jersey.config.property.packages</param-name>
<param-value>com.abc.def.rest</param-value>
</init-param>
<load-on-startup>0</load-on-startup>
</servlet>
Merci!
Ce que vous voulez revenir est pas JSON valide. Voulez-vous dire:
Oui, quelque chose comme
Est SimplePojo un JAXB annoté pojo? Avez-vous mis en place un JSONJAXBContext dans un @Fournisseur quelque part?
Pourriez-vous s'il vous plaît laissez-moi savoir comment faire pour que mon SimplePojo JAXB annoté?
["value1", "value2", ..."valueN"]
?Oui, quelque chose comme
[{"description1":"value1","name1":"name_"},{"description2":"value2","name2":"name_"},....]
mais je finis toujours par arriver {"nameOfTheEntity":[{"description1":"value1","name1":"name_"},{"description2":"value2","name2":"name_"},....]}
Est SimplePojo un JAXB annoté pojo? Avez-vous mis en place un JSONJAXBContext dans un @Fournisseur quelque part?
Pourriez-vous s'il vous plaît laissez-moi savoir comment faire pour que mon SimplePojo JAXB annoté?
OriginalL'auteur Ayaz Pasha | 2012-06-01
Vous devez vous connecter pour publier un commentaire.
Vous pouvez définir votre méthode de service comme suit, à l'aide de Personne POJO:
La classe POJO:
Les résultats se présente comme suit:
L'amélioration de la réponse. Avec la solution ci-dessus, nous avons pour remplacer le toString méthode dans chaque classe du modèle, d'où l'autre solution que j'ai trouvé here, cliquez-moi. Nous remplaçons le JAXB sérialiseur JSON avec un meilleur comportement sérialiseur JSON comme Jackson. Avec cette solution, nous n'avons pas à modifier toutes les classes du modèle qui sont exposées en tant que services REST. Avec très peu de changement de configuration et de personnalisation de
MessageBodyWriter
classe de Jersey fera.OriginalL'auteur tavi
Pour retourner les entrées dans le tableau-type de style, vous devez construire votre entité de la matrice.
Essayez ce qui suit:
si vous rencontrez quelques difficultés selon le type de retour de
toArray()
méthode, vous pourriez convertir explicitement la matrice:UPD: essayer de convertir votre liste de JSONArray:
et puis:
return Response.ok(listOfPojos.toArray()).build();
je reçois le message d'erreurSEVERE: A message body writer for Java class [Ljava.lang.Object;, and Java type class [Ljava.lang.Object;, and MIME media type application/json was not found
vous devez ajouter
jersey-json
à votre classpathPour le changement
Response.ok((com.abc.def.rest.model.SimplePojo[])yourListInstance.toArray()) .build();
- je obtenircom.sun.jersey.spi.container.ContainerResponse mapMappableContainerException java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Lcom.abc.def.rest.model.SimplePojo;
débogage à ce point et voir ce que tu as là.
à ce stade, j'obtiens la liste de mes SimplePojo(s)
OriginalL'auteur Alex Stybaev