gpt4 book ai didi

java - 如何将对象从 ContainerRequestFilter 传递到资源

转载 作者:塔克拉玛干 更新时间:2023-11-01 23:10:20 29 4
gpt4 key购买 nike

我如何/应该如何将对象从 ContainerRequestFilter 传递到 (JAX-RS) Resteasy 版本 3.0.11 中的(匹配后)资源,该版本嵌入了 undertow 并使用了 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,您还可以在过滤器和资源类中注入(inject)任何 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。

关于java - 如何将对象从 ContainerRequestFilter 传递到资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31866258/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com