当前位置: 首页 > 知识库问答 >
问题:

在JAX-RS资源方法中获取原始请求体

蔡弘扬
2023-03-14

如何从JAX-RS资源方法访问原始请求主体,例如java.io.inputstreambyte[]?对于特定的资源类或方法,我希望容器绕过任何MessageBodyReader,但是项目中有其他资源应该使用一些MessageBodyReader

我已经尝试过了,但是它将调用注册的MessageBodyReaders并且无法将结果分配给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();
    // ... 
}

我用的是泽西1.11。

共有1个答案

许振海
2023-03-14

以防万一这对任何人都有帮助

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();

    }
 类似资料:
  • 问题内容: 我正在通过DropWizard 0.7.1使用Jersey / JAX-RS公开RESTful服务端点。我所有的实体POJO都用JAX- RS和Hibernate / JSR-303 bean验证注释进行了注释,如下所示: 当资源方法接收到这些POJO之一作为输入时(实际上,DropWizard已经将HTTP实体JSON反序列化为一个实例),我想根据Hibernate / Bean V

  • 我正在通过DropWizard 0.7.1使用泽西/JAX-RS来公开RESTful服务endpoint。我已经用JAX-RS和HiberNate/JSR-303 bean验证注释注释了我所有的实体POJO,如下所示: 当资源方法接收到其中一个POJO作为输入时(在引擎盖下,DropWizard已经将HTTP实体JSON反序列化为

  • 问题内容: 我一直在尝试使用NetBeans Ide创建一个简单的Restful WebService。 我的Java EE版本是:Java EE 7 Web。 我创建了一个新的Java Web应用程序,设置此ContexPath: 。 现在,运行我的应用程序,浏览器在以下位置显示我的页面: 因此,一切正常。 然后,我尝试使用RESTful Web服务向导创建一个简单的Restful资源。 因此,

  • 我有一个小的angularjs应用程序,它在其中一个控制器中使用angularjs资源。下面是资源使用的代码 当页面第一次加载时,一切都很好,我得到了我需要的所有数据。但当我提出第二个请求时(例如,按下页面上调用getFilteredTask(filter)函数的按钮)。我有一个结果。状态=-1。根据Fiddler和Chrome在开发工具中的网络选项卡,请求状态为200,但已被取消。我也检查了后端

  • 我有一个项目,基本上是一个Apache Wicket网络应用程序,但它也有3个REST服务。我想把这两种不同的技术放在一个应用程序中,因为它们共享很多类。另外,我希望它们共享同一个JPA实例,因为它们在同一个数据库上操作。 Wicket类不受此影响,因为Wicket过滤器可能在JAX-RS有机会获取URL之前运行。但是像css文件这样的普通资源掌握在JAX-RS手中,导致 除了上面显示的服务方法的

  • 问题内容: 我希望能够从请求中打印JAX-RS 2 JSON有效负载,而不管我的应用程序服务器上的实际实现如何。 我已经尝试过在SO上提出建议的解决方案,但是所有解决方案都包含实际实现中的二进制文件(例如Jersey和类似文件),并且只允许在我的应用程序中使用javaee- api v 7.0。 我尝试在我的客户端上实现ClientRequestFilter和ClientResponseFilte