在Jersey中获取HttpServletRequestWrapper

时间:2011-05-16 10:32:40

标签: java servlets jersey jax-rs

我编写了一个名为HTTPRequest的HttpServletRequestWrapper,它读取完整的HTTP POST主体以供进一步使用。这个位于http://natch3z.blogspot.com/2009/01/read-request-body-in-filter.html

的代码中

我的Jersey服务器应用程序需要让这个包装器来读取正文。不幸的是,我不知道该怎么做。

我试过把

@Context HTTPRequest request;

但它不起作用(缺少字段依赖)。

我也尝试过:

@Context HttpServletRequest request;

然后转换为HTTPRequest,它既不起作用($ ProxyXXX也不能转换为HTTPRequest)。

我在互联网上搜索了相关信息,但我找不到任何相关信息。任何的想法? :)

谢谢!

1 个答案:

答案 0 :(得分:1)

我不太明白:HTTPRequest是扩展HttpServletRequestWrapper的对象,对吧?

因此,如果您希望Jersey通过@Context注释注入它,则需要实现ContextResolver。实际上在你的情况下应该很容易:

@Provider
HTTPRequestContextResolver implements ContextResolver<HTTPRequest> {

@Context HttpServletRequest request;

  HTTPRequest getContext(Class<?> type) {
      return new HTTPRequest(request);
  }
}

已更新:如果您已将原始请求包装在过滤器中,则可能会遇到问题,因为Jersey使用动态代理包装原始请求。