4

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

4

1 回答 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 回答