我的问题与此问题基本相同:How can I get resource annotations in a Jersey ContainerResponseFilter。
但是我使用Java Jersey 2.4并且找不到ResourceFilterFactory或ResourceFilter类的任何标志。文档也没有提到它们。他们被弃用了还是真的被隐藏了?如果他们已被弃用,我可以使用什么呢?现在有一种方法可以使用Jersey 2.4和2.5从ContainerRequestFilter获取资源注释吗?
由于
答案 0 :(得分:18)
如果您想根据资源方法/类上可用的注释修改请求的处理,那么我建议您使用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);
}
}
}
在registration之后(如果您正在使用包扫描,那么您不需要注册它以防其上有@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();
}
}