Jersey InputStream wird im Filter modifiziert. Kann nicht herausfinden, wie man auf modifizierten InputStream in Jersey Resource zugreift

8

Wie in beschrieben, wie Jersey-Interzeptoren verwendet werden, um eine Anfrage zu erhalten Körper , ich modifiziere den EntityInputStream in einem ContainerRequestFilter.

%Vor%

Später kann ich jedoch nicht herausfinden, wie ich auf den modifizierten InputStream zugreifen kann. Ich kann den ServletContext in der Ressource abrufen, aber ich kann nicht herausfinden, wie das Objekt, das ich tatsächlich modifiziert habe, in dem Filter, dem ContainerRequest, erhalten wird.

Kann ich so etwas tun? Jersey kann nicht starten, wenn ich das versuche:

%Vor%

Jersey Fehler:

Fehlende Abhängigkeit für die Methode public javax.ws.rs.core.Response example.TestController.test (com.sun.jersey.spi.container.ContainerRequest), mit POST der Ressource annotiert, class example.TestController, wird nicht erkannt als eine gültige Ressourcenmethode.

Ich stehe auf einer alten Version von Trikot, 1.8, fest, also bin ich mir nicht sicher, ob das ein Teil des Problems ist.

    
CStepnitz 17.09.2015, 14:04
quelle

1 Antwort

1

Sie müssen lediglich einen InputStream als Entity-Body in Ihrer Ressourcenmethode akzeptieren. Wenn du das ByteArrayInputStream willst, wirf es einfach um.

%Vor%

Wenn Sie noch nicht wissen, wie Jersey den Anfrage-Stream (für den Anfragetext) in Java-Typen umwandelt (zum Beispiel JSON in POJO), ist MessageBodyReader s. Sie können mehr darüber in JAX-RS Entity Providers lesen.

Jersey kommt bereits mit einigen Standard-Lesern für leicht konvertierbare Typen, zum Beispiel String. Die meisten Inhaltstypen können in String konvertiert werden. Ebenso hat es einen Leser, der mit InputStream umgehen kann. Dies ist wahrscheinlich die einfachste Konvertierung, da die Anfrage bereits als InputStream eingeht, also müsste der Leser wirklich den ursprünglichen Stream zurückgeben, und das würde an unsere Methode übergeben werden.

Wenn wir uns die Implementierung ansehen InputStreamProvider , wir können sehen, dass das tatsächlich passiert. Der ursprüngliche Stream wird einfach zurückgegeben . Und da der Filter vor den Lesern stattfindet, gibt der Leser einfach den von uns eingestellten Stream zurück.

Hier ist ein vollständiges Beispiel mit Jersey Test Framework

%Vor%

Hier ist die Testabhängigkeit

%Vor%     
Paul Samsotha 22.09.2015, 01:33
quelle

Tags und Links