如何将对象从ContainerRequestFilter传递给Resource

我应该如何/应该将一个对象从ContainerRequestFilter传递到(JAX-RS)Resteasy版本3.0.11中的(后匹配)资源,该版本已嵌入并使用Guice?

方法ContainerRequestContext #setProperty存储与HttpServletRequest同步的值。 因此,使用普通的JAX-RS,您可以存储如下属性:

 @Provider public class SomeFilter implements ContainerRequestFilter { @Override public void filter(ContainerRequestContext requestContext) throws IOException { requestContext.setProperty("someProperty", "someValue"); } } 

之后您可以在资源类中获取它:

 @GET public Response someMethod(@Context org.jboss.resteasy.spi.HttpRequest request) { return Response.ok(request.getAttribute("someProperty")).build(); } 

使用CDI,您还可以在filter和资源类中注入任何bean:

 @Provider public class SomeFilter implements ContainerRequestFilter { @Inject private SomeBean someBean; @Override public void filter(ContainerRequestContext requestContext) throws IOException { someBean.setFoo("bar"); } } 

在您的资源类中:

 @Inject private SomeBean someBean; @GET public Response someMethod() { return Response.ok(someBean.getFoo()).build(); } 

我希望与Guice一起工作。

更新 :正如@bakil正确指出的那样,如果要传递的对象只应与当前请求关联,则应使用@RequestScoped bean。