2017-02-03 5 views
0

Après avoir déplacé notre application guerre de Glassfish3 vers un déploiement avec Payara Micro, la sérialisation JAX-RS (jersey + jackson) ne fonctionne plus.JAX-RS: la sérialisation d'un POJO échoue sur le micro payara

Merci à Adam, nous avons résolu le problème avec sérialisation collections pures, nous rencontrons maintenant des erreurs similaires lors du retour POJO:

@GET 
@Produces("application/json") 
public BirdyTO findAllDaBirdy() { 
    return getBirdy(); 
} 

où BirdyTO est un POJO qui contient d'autres POJO et/ou des collections de POJO.

Que l'on nous donne l'erreur:

MessageBodyWriter not found for media type=application/json;charset=utf-8, type=class org.example.BirdyTO, genericType=class org.example.BirdyTO. 

Chose étrange est que les interfaces semblables dans la même application fonctionne très bien.

Une idée?

+0

Avez-vous vérifié que le .war contient toutes les dépendances jackson nécessaires? Et pourriez-vous ajouter le code de classe BirdyTO. – FrAn

Répondre

0

Le mappage de POJO sur JSON n'est pas standardisé dans Java EE. Glassfih 4/Payara utilise MOXy pour mapper POJO sur JSON par défaut, qui utilise JAXB pour le mappage. Voir [ce message par Reza Rahman] (https://blogs.oracle.com/theaquarium/entry/moxy_is_the_new_default). Il est possible que BirdyTO ne puisse pas être mappé par Moxy.

Si vous voulez utiliser Jackson, vous devez:

  • désactiver la fonction par défaut Moxy (en définissant jersey.config.server.disableMoxyJson propriété à true)
  • ajouter bibliothèque Jackson dans votre application (com.fasterxml.jackson.jaxrs)
  • tour sur le JacksonFeature (fourni par la bibliothèque Jackson) dans votre application JAX-RS

Plus d'informations comment le faire dans ce un swer: Customizing JSON marhsalling with GlassFish v4

+0

Infos sur l'or et solution correcte. Merci beaucoup! Je ne sais toujours pas pourquoi MOXy ne parvient pas à cartographier certains POJO, mais je suppose que nous devrions s'en tenir à jackson depuis que nous avons construit notre application avec elle en premier lieu. – simomat

+0

Nous l'avons eu. De toute évidence, MOXy nécessite que les POJO de transport aient des constructeurs par défaut. – simomat

+0

En Java EE 8, le mappage doit être normalisé par la spécification JSON-B. Jusque-là, le comportement diffère dans des différences subtiles comme celle-ci. Veuillez marquer la réponse comme la bonne réponse :) – OndrejM