我有一个使用Guice连接的Jersey客户端。真的联系起来:))
资源也是使用Guice创建的。
类似的东西:
@Inject
class TestResource {
@Inject DataFatcher fetcher,
...
...
}
现在,DataFetcher对象是使用Guice创建的,并且使用合成具有深层嵌套的guice创建的对象。现在,其中一些对象需要访问使用POST传递的参数。
我有一个HttpServletModule为我做这个。我认为这是正确的工作。
HttpServletModule.java
Map<String, String[]> providerRequestParametersMap(HttpServletRequest reuquest) {
request.getParametersMap()
}
现在,不幸的是,它看起来像Jersey,已经拦截了请求并从请求参数Map中删除了POST参数。所以,我的这张地图是空的。
如何,我可以访问Guice中的POST参数吗?我不想直接在资源中注入MultivaledMap的表单,因为这需要从资源中一直传递下来,这会弄乱我的设计。
任何提示都非常感谢。我可以考虑在Jersey过滤器启动之前创建一个拦截HttpServletRequest的Filter。希望有一个更好,更简单的解决方案:)。
答案 0 :(得分:0)
最简单的解决方案可能是一个servlet Filter,它可以完成你的建议:在Jersey处理HttpServletRequest并在请求范围的对象中设置数据之前拦截它。
如果你使用的是Guice Servlet,那么过滤至少比web.xml中的设置少一些。
如果您更喜欢仅限泽西岛的解决方案,则可以使用ContainerRequestFilter。这使您可以访问ContainerRequest,而ContainerRequest又为您提供了一个Form(一个javax.ws.rs.core.MultialuedMap)。