Filtre de servlet par rapport à l'intercepteur CXF pour la modification de la requête & amp; contenu de la réponse?
Nous avons construit un peu de REPOS (jax-rs) des services web avec Apache CXF. Ils retourner une réponse JSON.
J'ai maintenant besoin de modifier certains des paramètres de la requête, et le contenu de la réponse. (En gros, nous avons besoin d'encoder/crypter les données renvoyées par le service; et décoder/décrypter les mêmes données lorsqu'il est utilisé comme paramètre dans un appel de service ultérieure.)
Il semble que j'ai au moins 4 options ici:
- Utiliser un filtre de Servlet
- Utiliser un CXF Intercepteur
- Utiliser un JAX-RS Filtre
- Ne pas utiliser n'importe quel modèle particulier, et d'effectuer l'encodage/décodage dans le service de la logique.
J'ai utilisé de la Servlet Filtres avant, et de comprendre exactement comment modifier la requête params et le corps de la réponse, je vais donc me pencher vers que. Cependant, je suis ouvert à l'aide d'un CXF Intercepteur ou de JAX-RS filtre si c'est la plus "bonne" façon de résoudre ce problème lors de l'utilisation de CXF. Mais en se fondant sur la documentation, je ne comprends pas vraiment comment pour ce faire. Par exemple, dois-je utiliser le setContent méthode de l'objet du Message à modifier la réponse JSON? Qu'est-ce que le paramètre de format dans ce cas, il suffit de String.class?
source d'informationauteur Michael Lucas
Vous devez vous connecter pour publier un commentaire.
Pour répondre à ma propre question ici ... j'ai fini à l'aide d'un JAX-RS filtre, et il a bien fonctionné, une fois que je suis passé du manque de documentation. J'ai utilisé le (plutôt rare) documentation de http://cxf.apache.org/docs/jax-rs-filters.html . Remarque malgré son nom, un JAX-RS filtre est un CXF spécifique de la bête, ne fait pas partie de JAX-RS standard (autant que je puisse en dire).
Voici un exemple de code:
Il est à noter que la mise en œuvre de MyOutputStreamWrapper est la partie importante dans la modification du contenu de la réponse. Je ne pouvais pas inclure cette source ici (en fait, mon œuvre a un nom différent) en raison de considérations de sécurité.