Mik*_*dal 13 java rest http jax-rs
如何从JAX-RS资源方法访问原始请求主体,java.io.InputStream或byte[]?我希望容器绕过任何MessageBodyReader特定的资源类或方法,但我在项目中有其他资源应该使用一些MessageBodyReader.
我试过这个,但它会调用已注册的MessageBodyReaders并且无法将结果分配给InputStream(同样的问题byte[]).
@POST
public Response post(@Context HttpHeaders headers, InputStream requestBody) {
MediaType contentType = headers.getMediaType();
// ...
}
Run Code Online (Sandbox Code Playgroud)
我也尝试了这个,但是容器无法初始化此错误:
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();
// ...
}
Run Code Online (Sandbox Code Playgroud)
该方法位于子资源类中,该子资源类是从@Path另一个资源类中带有注释的方法创建的.
我正在使用Jersey 1.11.
TPE*_*HES 18
只是这有助于任何人
public Response doAThing(@Context HttpServletRequest request, InputStream requestBody){
BufferedReader reader = new BufferedReader(new InputStreamReader(requestBody));
StringBuilder out = new StringBuilder();
String line;
while ((line = reader.readLine()) != null) {
out.append(line);
}
System.out.println(out.toString()); //Prints the string content read from input stream
reader.close();
return Response.ok().entity("{\"Submit\": \"Success\"}").build();
}
Run Code Online (Sandbox Code Playgroud)
jbu*_*off 10
这对我有用:
@POST
@Consumes(MediaType.WILDCARD)
@Produces(MediaType.WILDCARD)
public Response doSomething(@Context HttpServletRequest request, byte[] input) {
log.debug("Content-Type: {}", request.getContentType());
log.debug("Preferred output: {}", request.getHeader(HttpHeaders.ACCEPT));
}
Run Code Online (Sandbox Code Playgroud)
我发现注入 HttpServletRequest 不起作用的原因是,这是因为我确实在 Jersey Test Framework 中运行我的代码,而不是在正确的 Servlet 容器中。如果我在适当的 Servlet 容器中运行它,它就会起作用。
遗憾的是,没有纯粹的 JAX-RS 方式来获取原始请求正文。
| 归档时间: |
|
| 查看次数: |
22927 次 |
| 最近记录: |