如何從JAX-RS資源方法訪問原始請求體,如java.io.InputStream
或byte[]
?我希望容器繞過特定資源類或方法的任何MessageBodyReader
,但是我應該使用一些MessageBodyReader
的項目中有其他資源。使用JAX-RS資源方法獲取原始請求體
我試過這個,但它會調用註冊的MessageBodyReader
s並且未能將結果分配給InputStream
(與byte[]
同樣的問題)。
@POST
public Response post(@Context HttpHeaders headers, InputStream requestBody) {
MediaType contentType = headers.getMediaType();
// ...
}
我也試過,但隨後的容器失敗,此錯誤初始化:
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();
// ...
}
的方法是在一個子資源類,它是從一個方法創建了另一個資源類中的@Path
註釋。
我正在使用Jersey 1.11。
你的第二個錯誤似乎並不相關的'@ Context'錯誤。你有一個類級別的'@ Path'註釋嗎? – Perception 2013-04-22 14:31:00
不,但它實際上是一個子資源,通過@Path註釋從另一個資源類中的方法調用。如果我刪除了HttpServletRequest參數(但我不會得到正文),它確實有效。 – 2013-04-22 14:51:39