如何在Jersey 2.4filter中获取资源注释?

我的问题与此问题基本相同: 我如何在Jersey ContainerResponseFilter中获取资源注释 。

但我使用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将与你的资源方法相关联。

另一方面,您始终可以在filter中注入ResourceInfo (无法使用@PreMatching进行注释)并从中获取注释:

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