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