Changement de type de contenu de jax-rs service REST
Pardonnez-moi, mais j'ai peut-être pas familier avec tout le jargon nécessaire de poser cette question correctement.
Je suis en train de travailler sur un assez simple service web REST en Java à l'aide de la org.apache.cxf.jaxrs.ext
mise en œuvre de jax-rs. La méthode d'en-tête est comme ceci:
@GET
@Path("json/{fullAlias}")
@Produces({"application/json"})
public String json(@PathParam("fullAlias") String fullAlias, @Context MessageContext req)
où MessageContext est org.apache.cxf.jaxrs.ext.MessageContext
.
Il y a deux choses que je suis en train de réaliser que je n'arrive pas à comprendre:
- Modifier le type de contenu si certaines conditions sont remplies (par exemple, pour une erreur)
- Modifier le code d'état de la réponse
J'ai essayé d'utiliser la modification de la réponse en y accédant par le MessageContext:
HttpServletResponse response = req.getHttpServletResponse();
response.setContentType("text/plain")
response.setStatus("HttpServletResponse.SC_BAD_REQUEST);
Mais ces changements n'ont aucune incidence sur la réponse envoyée; avec ou sans le @Produit de l'annotation, le réglage du type de contenu à l'intérieur de la méthode n'affecte pas le contenu réel de type (Avec l'annotation, il retourne "application/json", sans valeur par défaut est "text/html").
Je suis de retour d'une simple Chaîne de caractères comme le corps. Je me suis amusé à essayer de revenir un javax.ws.rs.de base.Réponse de l'objet pour en faire ce que je veux, mais je ne sais pas beaucoup sur elle.
Comment puis-je modifier le type de contenu et/ou les codes d'état de l'intérieur de cette méthode?
OriginalL'auteur Indigenuity | 2011-04-05
Vous devez vous connecter pour publier un commentaire.
Une approche consiste à jeter un WebApplicationException, tel que décrit par le Rythme, qui ne fonctionnera que si vous êtes à la recherche spécifiquement pour gérer une condition d'erreur. Si vous êtes à la recherche pour être en mesure de modifier votre contenu à tout moment pour quelque raison, vous voulez prendre un coup d'oeil au retour d'une Réponse que le résultat de votre méthode de service plutôt qu'une Chaîne de caractères. Retour une Réponse vous donne la plus grande quantité de contrôle sur la façon dont votre service répond à la demande du client (il nécessite plus de code que de retourner une chaîne de caractères).
Voici un exemple de la façon dont vous pouvez faire usage de l'objet de Réponse:
OriginalL'auteur Kris Babic
Je ne suis pas sûr si c'est la meilleure approche, mais j'ai effectué les opérations suivantes pour résoudre votre question #1.
EDIT: j'ai alors jeté le résultant
WebApplicationException
.OriginalL'auteur Pace
Vous pouvez écrire votre propre Réponse Filtre pour modifier le type de contenu d'en-tête.
Ce filtre s'ajouter le "image/png" header content-type. Vous pouvez également modifier ou supprimer des en-têtes de JAX-RS de réponse des filtres.
OriginalL'auteur sudhir shakya