我如何/应该将对象从 ContainerRequestFilter 传递到 (JAX-RS) Resteasy 版本 3.0.11 中嵌入并使用 Guice 的(匹配后)资源?
问问题
5783 次
1 回答
11
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,您还可以在过滤器和资源类中注入任何 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。
于 2015-08-07T05:28:17.050 回答