4

undertow が埋め込まれ、Guice を使用する (JAX-RS) Resteasy バージョン 3.0.11 で、ContainerRequestFilter から (マッチング後の) リソースにオブジェクトを渡すにはどうすればよいですか?

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 に答える