如何从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