L'obtention de raw du corps de la requête de JAX-RS méthode
Comment puis-je accéder à la crue du corps de la requête à partir d'un JAX-RS méthode, comme java.io.InputStream
ou byte[]
? Je veux le conteneur afin de contourner tout MessageBodyReader
pour une ressource spécifique à une classe ou une méthode, mais j'ai d'autres ressources dans les projets qui devraient être à l'aide de certains MessageBodyReader
.
J'ai essayé ceci, mais il va invoquer enregistré MessageBodyReader
s et de ne pas attribuer le résultat à InputStream
(même problème avec les byte[]
).
@POST
public Response post(@Context HttpHeaders headers, InputStream requestBody) {
MediaType contentType = headers.getMediaType();
//...
}
J'ai aussi essayé cela, mais alors le conteneur ne parvient pas à initialiser avec cette erreur:
SÉVÈRE: Les avertissements et erreurs suivantes ont été détectées avec des ressources et/ou des classes de fournisseur: SÉVÈRE: dépendance Manquante pour la méthode public javax.ws.rs.de base.Réponse SomeResource.la poste(javax.servlet.http.HttpServletRequest) au paramètre à l'indice 0 GRAVE: la Méthode, le public javax.ws.rs.de base.Réponse SomeResource.la poste(javax.servlet.http.HttpServletRequest), annoté avec des POST de ressources, classe SomeResource, n'est pas reconnu comme valide méthode.
@POST
public Response post(@Context HttpServletRequest request) {
String contentType = request.getContentType();
InputStream requestBody = request.getInputStream();
//...
}
La méthode dans une sous-classe de ressource, qui est créé à partir d'une méthode avec un @Path
annotation dans une autre classe de ressource.
Je suis à l'aide de Jersey 1.11.
@Context
erreur. Avez-vous un niveau de classe @Path
annotation?Non, mais c'est en fait un sous-ressource, appelée à partir d'une méthode d'une autre classe de ressource avec un @Chemin d'annotation. Il fonctionne si je supprimer le HttpServletRequest paramètre (mais je n'irai pas le corps).
OriginalL'auteur Mikael Ståldal | 2013-04-22
Vous devez vous connecter pour publier un commentaire.
juste au cas ou cela peut aider n'importe qui
OriginalL'auteur TPEACHES
Cela fonctionne pour moi:
OriginalL'auteur jbuhacoff
J'ai trouvé la raison que l'injection de HttpServletRequest n'a pas fonctionné, c'est parce que je n'ai couru mon code en Jersey Framework de Test, pas dans un bon conteneur de Servlet. Il fonctionne si je le lance dans un bon conteneur de Servlet.
Il est dommage qu'il n'y est pas de pure JAX-RS de manière à obtenir des crus du corps de la requête.
Williams Parce que HttpServletRequest fait partie de la servlet api, pas jaxrs. Et si vous voulez faire un test d'intégration avec un faible niveau de jersey conteneur de test comme la mémoire de l'un, vous ne serez pas en mesure d'utiliser l'api servlet.
Il a obtenu, grâce.
Je suis maintenant avoir le même problème!
OriginalL'auteur Mikael Ståldal