Beschaffung von roh-request-body in der JAX-RS-Ressource-Methode
Wie kann ich den Zugriff auf die raw-request-body von einer JAX-RS-Ressource-Methode, wie java.io.InputStream
oder byte[]
? Ich möchte den container zu umgehen MessageBodyReader
für eine bestimmte Ressource-Klasse oder-Methode, aber ich habe andere Ressourcen in den Projekten, die sollten mit etwas MessageBodyReader
.
Ich habe dies ausprobiert, aber es wird aufgerufen, eingetragen MessageBodyReader
s und nicht zu zuordnen das Ergebnis InputStream
(gleiche Problem mit byte[]
).
@POST
public Response post(@Context HttpHeaders headers, InputStream requestBody) {
MediaType contentType = headers.getMediaType();
//...
}
Habe ich auch schon versucht, aber dann wird der container nicht initialisiert werden, mit dieser Fehlermeldung:
SCHWERER: Die folgenden Fehler und Warnungen erkannt wurden, die mit Ressourcen-und/oder provider-Klassen: SCHWERER: Fehlende Abhängigkeit für die Methode public javax.ws.rs.core.Antwort SomeResource.post(javax.- servlet.http.HttpServletRequest) in-parameter auf index 0 SCHWERE: Methode public javax.ws.rs.core.Antwort SomeResource.post(javax.- servlet.http.HttpServletRequest), versehen mit POST von Ressourcen, Klasse SomeResource, nicht als gültig anerkannt Ressource-Methode.
@POST
public Response post(@Context HttpServletRequest request) {
String contentType = request.getContentType();
InputStream requestBody = request.getInputStream();
//...
}
Die Methode ist in einem sub-Ressource-Klasse, die erstellt wird, von einer Methode mit einer @Path
Anmerkung in einen anderen Ressource-Klasse.
Ich bin mit Jersey 1.11.
- Ihre zweite Fehler scheint nicht in Bezug auf einen
@Context
Fehler. Sie haben eine Klasse@Path
annotation? - Nein, aber es ist in der Tat ein subresource, die aufgerufen wird, eine Methode in einem anderen resource-Klasse mit @Path-annotation. Es funktioniert, wenn ich entfernen Sie die HttpServletRequest-parameter (aber dann werde ich nicht der Körper).
Du musst angemeldet sein, um einen Kommentar abzugeben.
nur sofern dies hilft jemand
Diese funktioniert bei mir:
Ich den Grund dafür gefunden, dass die Injektion des HttpServletRequest hat nicht funktioniert, weil ich habe mein code in Trikot-Test-Frameworks, die sich nicht in einer ordnungsgemäßen Servlet-container. Es funktioniert, wenn ich es in eine richtige Servlet-container.
Es ist schade, dass es keine Reine JAX-RS, um die raw-request-body.