2010-09-23 4 views
1

Fondamentalement, j'ai quelques modèles qui utilisent tous JAXB. Cependant, j'ai quelques fonctionnalités hautement personnalisées pour convertir en JSON et en arrière donc je veux écrire mon propre MessageBodyReader/Writer pour faire le travail pour moi.Comment puis-je dire à Jersey d'utiliser mon MessageBodyReader à la place en utilisant JAXB?

À l'heure actuelle, la partie écriture est terminée: si je renvoie un de mes modèles à partir d'une ressource REST, il passe par mon auteur. Mais quand j'essaie d'accepter un modèle en tant que FormParam, il n'utilise pas mon MessageBodyReader et tente à la place de le démasquer en utilisant JAXB (qui échoue).

Alors comment puis-je dire à Jersey d'utiliser mon Reader à la place?

public TestModel testProvider(@FormParam("model") TestModel input){ //doesnt work 
    return new TestModel(); //this part works! 
} 
+0

MessageBodyReaders sont pour consommer tout le corps du message. Ils ne sont pas utilisés pour consommer des valeurs de forme individuelles. Si le message entier était votre modèle à la place, utilisez "TestModel input" sans @FormParam. –

Répondre

0

Depuis votre graveur fonctionne, mais votre lecteur n'a pas, je devine que vous venez de manquer quelque chose dans votre configuration. Quelques éléments à vérifier:

  • Avez-vous l'annotation @Provider sur votre lecteur?
  • Avez-vous implémenté correctement la méthode isReadable sur votre lecteur?
  • Avez-vous l'annotation @Consumes appropriée sur le lecteur, son type de support correspond-il au type de support spécifié dans votre méthode de service?
1
  1. Marquer comme @Provider
  2. Ajouter la configuration à votre web.xml EX:


<init-param><param-name>com.sun.jersey.config.property.packages</param-name> <param-value> your.package.that.contains.the.provider </param-value> </init-param>

Questions connexes