如果要基于资源方法/类上可用的注释来修改请求的处理,则建议使用JAX-RS
2.0中的DynamicFeature。使用
DynamicFeature可以为可用资源方法的子集分配特定的提供程序。例如,考虑我有一个资源类,例如:
@Path("helloworld")public class HelloWorldResource { @GET @Produces("text/plain") public String getHello() { return "Hello World!"; }}我想为其分配一个ContainerRequestFilter。我将创建:
@Providerpublic 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),并从中获取注释:
@Providerpublic class MyContainerRequestFilter implements ContainerRequestFilter { @Context private ResourceInfo resourceInfo; @Override public void filter(final ContainerRequestContext requestContext) throws IOException { resourceInfo.getResourceMethod().getDeclaredAnnotations(); }}


