我编写了一个名为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)。
我在互联网上搜索了相关信息,但我找不到任何相关信息。任何的想法? :)
谢谢!
答案 0 :(得分:1)
我不太明白:HTTPRequest
是扩展HttpServletRequestWrapper的对象,对吧?
因此,如果您希望Jersey通过@Context注释注入它,则需要实现ContextResolver
。实际上在你的情况下应该很容易:
@Provider
HTTPRequestContextResolver implements ContextResolver<HTTPRequest> {
@Context HttpServletRequest request;
HTTPRequest getContext(Class<?> type) {
return new HTTPRequest(request);
}
}
已更新:如果您已将原始请求包装在过滤器中,则可能会遇到问题,因为Jersey使用动态代理包装原始请求。