Come accedere al corpo della richiesta non elaborato da un metodo risorsa JAX-RS, come java.io.InputStream
o byte[]
? Voglio che il contenitore ignori qualsiasi MessageBodyReader
per una specifica classe di risorse o un metodo, ma ho altre risorse nei progetti che dovrebbero utilizzare alcuni MessageBodyReader
.Ottenimento corpo di richiesta non elaborato nel metodo risorsa JAX-RS
Ho provato, ma invocherò registrato MessageBodyReader
s e non riesco ad assegnare il risultato a InputStream
(stesso problema con byte[]
).
@POST
public Response post(@Context HttpHeaders headers, InputStream requestBody) {
MediaType contentType = headers.getMediaType();
// ...
}
ho anche provato, ma poi il contenitore non riesce a inizializzare con questo errore:
SEVERE: The following errors and warnings have been detected with resource and/or provider classes: SEVERE: Missing dependency for method public javax.ws.rs.core.Response SomeResource.post(javax.servlet.http.HttpServletRequest) at parameter at index 0 SEVERE: Method, public javax.ws.rs.core.Response SomeResource.post(javax.servlet.http.HttpServletRequest), annotated with POST of resource, class SomeResource, is not recognized as valid resource method.
@POST
public Response post(@Context HttpServletRequest request) {
String contentType = request.getContentType();
InputStream requestBody = request.getInputStream();
// ...
}
Il metodo è in una classe sub risorsa, che viene creato da un metodo con un'annotazione @Path
in un'altra classe di risorsa.
Sto usando Jersey 1.11.
Il tuo secondo errore non sembra correlato a un errore di '@ Context'. Hai un'annotazione '@ Path' a livello di classe? – Perception
No, ma in realtà è una sottorisorsa, invocata da un metodo in un'altra classe di risorsa con un'annotazione @Path. Funziona se rimuovo il parametro HttpServletRequest (ma poi non otterrò il corpo). –