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 MessageBodyReaders 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).
Schreibe einen Kommentar