如何在 Jersey 2.4 过滤器中获取资源注释



我的问题基本上和这个问题相同:如何在泽西岛容器响应过滤器中获取资源注释。

但是我使用的是Java Jersey 2.4,找不到ResourceFilterFactory或ResourceFilter类的任何标志。文档也没有提到它们。它们是否已被弃用,或者它们只是隐藏得很好?如果它们已被弃用,我可以使用什么?现在有没有办法使用 Jersey 2.4 和 2.5 从 ContainerRequestFilter 获取资源注释?

谢谢

如果你想根据资源方法/类上可用的注释修改请求的处理,那么我建议使用 JAX-RS 2.0 的 DynamicFeature。使用 DynamicFeature可以为可用资源方法的子集分配特定的提供程序。例如,假设我有一个资源类,如下所示:

@Path("helloworld")
public class HelloWorldResource {
    @GET
    @Produces("text/plain")
    public String getHello() {
        return "Hello World!";
    }
}

我想为它分配一个ContainerRequestFilter。我将创建:

@Provider
public class MyDynamicFeature implements DynamicFeature {
    @Override
    public void configure(final ResourceInfo resourceInfo, final FeatureContext context) {
        if ("HelloWorldResource".equals(resourceInfo.getResourceClass().getSimpleName())
                && "getHello".equals(resourceInfo.getResourceMethod().getName())) {
            context.register(MyContainerRequestFilter.class);
        }
    }
}

注册后(如果您使用的是包扫描,则无需注册它,以防它上面有@Provider注释),MyContainerRequestFilter将与您的资源方法相关联。

另一方面,您可以随时在过滤器中注入 ResourceInfo(不能用 @PreMatching 注释)并从中获取注释:

@Provider
public class MyContainerRequestFilter implements ContainerRequestFilter {
    @Context
    private ResourceInfo resourceInfo;
    @Override
    public void filter(final ContainerRequestContext requestContext) throws IOException {
        resourceInfo.getResourceMethod().getDeclaredAnnotations();
    }
}

最新更新