Le corps d'un message de l'écrivain pour la classe Java java.util.ArrayList
J'ai reçu le dessous de la trace de la pile lors de l'accès sur de mon jax-rs ressources.
Je suis en utilisant Tomcat 7, avec Jersey 1.12 et Hibernate 4 et MySQL.
J'ai trouvé ce tutoriel, tout en recherchant une solution: http://aruld.info/handling-generified-collections-in-jersey-jax-rs/ mais aucun des exemples cités semblait fonctionner.
Ce qui me manque ici?
Veuillez pas de réponses qui m'ont écrit MessageBodyWriters
, cela devrait fonctionner. (Et je sais qu'il y a une solution, je ne peux pas le comprendre.)
Voici tous mes pots:
antlr-2.7.7.jar
asm-3.1.jar
commons-collections-3.2.1.jar
dom4j-1.6.1.jar
gson-1.7.1.jar
hibernate-commons-annotations-4.0.1.Final.jar
hibernate-core-4.1.0.Final.jar
hibernate-jpa-2.0-api-1.0.1.Final.jar
jackson-core-asl-1.9.2.jar
jackson-jaxrs-1.9.2.jar
jackson-mapper-asl-1.9.2.jar
jackson-xc-1.9.2.jar
javassist-3.15.0-GA.jar
jboss-logging-3.1.0.CR2.jar
jboss-transaction-api_1.1_spec-1.0.0.Final.jar
jersey-client-1.12.jar
jersey-core-1.12.jar
jersey-json-1.12.jar
jersey-server-1.12.jar
jersey-servlet-1.12.jar
jettison-1.1.jar
jsr311-api-1.1.1.jar
mysql-connector-java-3.1.12-bin.jar
Voici ma classe de ressource et méthode:
@Path("/region")
public class RegionService {
//This method is called if TEXT_PLAIN is request
@GET
@Produces(MediaType.APPLICATION_JSON)
public JResponse<List<Region>> region() {
RegionDao regionDao = new RegionDao();
regionDao.openSession();
List<Region> regions = regionDao.getAll();
regionDao.closeSession();
return JResponse.ok(regions).build();
}
}
Et voici le stacktrace:
SEVERE: Mapped exception to response: 500 (Internal Server Error)
javax.ws.rs.WebApplicationException: com.sun.jersey.api.MessageException: A message body writer for Java class java.util.ArrayList, and Java type java.util.List<campher.hibernate.entities.Region>, and MIME media type application/json was not found
at com.sun.jersey.spi.container.ContainerResponse.write(ContainerResponse.java:285)
at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1451)
at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1363)
at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1353)
at com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:414)
- Semble similaire: stackoverflow.com/questions/5161466/...
- Un grand merci. C'est exactement ça!! C'était en fait la question qui a résolu mon problème. J'ai besoin d'ajouter le com.soleil.jersey.l'api.json.POJOMappingFeature paramètre. facepalm
- Quel est le meilleur moyen d'aller sur cette question maintenant? Pourriez-vous poster votre commentaire comme une réponse ou devrais-je supprimer ce stupide question tout à fait?
- ne pas le supprimer. c'est un bon résultat de recherche de google.
- Salut, je vais avoir le même problème, mais je ne comprends pas ce que tu veux dire par "ajouter le com.soleil.jersey.l'api.json.POJOMappingFeature paramètre". Où / comment faites-vous cela?
- Dans
web.xml
, ajouter de la valeur à votre Maillot de servlet:<init-param><param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name><param-value>true</param-value></init-param>
. Sinon, si le problème vient du code client, puis ajouter cette fonctionnalité à Maillot de config du client:ClientConfig cc = new DefaultClientConfig(); cc.getFeatures().put("com.sun.jersey.api.json.POJOMappingFeature", true);Client.create(cc);
.
InformationsquelleAutor n4rzul | 2012-06-14
Vous devez vous connecter pour publier un commentaire.
Vous avez besoin d'annoter la Région de la classe avec @XmlRootElement.
comme une solution rapide, je vois:
L'autre réponse ne fonctionne pas pour moi (j'ai déjà eu l'XmlRootElement annotation), mais j'ai finalement réussi à le faire fonctionner avec JSON. Il était de retour XML tout beaux, tout simplement pas de JSON.
J'ai été en utilisant le jersey-bundle-1.17.jar (aussi essayé avec la asm-3.1.jar et jersey-json-1.17.jar ajouté au classpath et ne fonctionne toujours pas). J'ai finalement juste essayé de télécharger le zip qui comprend 12 pots. Une fois, j'ai ajouté tous les 12 pots de mon classpath j'ai enfin débarrassé de l'erreur et de grandes œuvres de retour JSON.
J'espère que cela aide quelqu'un.
EDIT: Voici un lien vers le fichier zip qui contient 12 fichiers jar: jersey-archive-1.17.zip
12 different jars
avez-vous ajouté? S'il vous plaît, veuillez les mentionner! ou de donner un exemple de projet, s'il vous plaît.@XmlRootElement avec cette annotation, il est possible de sélectionner JSON ou XML en Jersey.
Merci beaucoup!
Il suffit d'ajouter au reste ceci:
@Produit({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
Sur la demande que vous avez mis sur l'en-tête si vous ne le retour en xml ou en json!
Que vous attendez de la Liste, vous pouvez annoter vos haricots classe avec @XmlRootElement. Mais même de ne pas travailler pour la Carte.
Jersey utilise en interne moxy pour faire le travail fait.
Ajouter la dépendance
ajouter
@@XmlRootElement
avant de votre classe de la RégionPS: Ne pas voter la réponse si elle ne fonctionne pas pour vous.