rud*_*lfv 9 java annotations jersey filter
我的问题与此问题基本相同:我如何在Jersey ContainerResponseFilter中获取资源注释.
但是我使用Java Jersey 2.4并且找不到ResourceFilterFactory或ResourceFilter类的任何标志.文档也没有提到它们.他们被弃用了还是真的被隐藏了?如果他们已被弃用,我可以使用什么呢?现在有一种方法可以使用Jersey 2.4和2.5从ContainerRequestFilter获取资源注释吗?
谢谢
Mic*_*dos 18
如果要根据资源方法/类上可用的注释修改请求的处理,那么我建议使用JAX-RS 2.0中的DynamicFeature.使用DynamicFeatures,您可以为可用资源方法的子集分配特定提供程序.例如,考虑我有一个类似的资源类:
@Path("helloworld")
public class HelloWorldResource {
@GET
@Produces("text/plain")
public String getHello() {
return "Hello World!";
}
}
Run Code Online (Sandbox Code Playgroud)
我想为它分配一个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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
注册后(如果您正在使用包扫描,那么您不需要注册它以防它上面有@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();
}
}
Run Code Online (Sandbox Code Playgroud)