我正在运行Jersey 1.8应用程序。泽西岛作为Servlet运行。
我需要编写一个给定普通请求/响应的 servlet过滤器,能够确定哪个REST资源/方法将响应请求并从注释中提取值。
例如,假设我有以下资源:
@Path("/foo")
@MyAnnotation("hello")
public class FooResource {
@GET
@Path("/bar")
@MyOtherAnnotation("world")
public Response bar(){
...
}
}
当请求GET /foo/bar
进来时,我需要我的servlet过滤器才能从"hello"
和"world"
中提取值MyAnnotation
和MyOtherAnnotation
泽西岛自己的servlet处理请求。
此过滤器逻辑应该能够适用于所有请求和注册的所有资源。
有没有办法访问Jersey的内部路由机制,以获取Jersey将发送请求的类/方法引用?
我也对其他建议持开放态度,但最好不要试图通过自己阅读@Path
注释来破解我自己的路由机制。
答案 0 :(得分:1)
@Provider
@Priority(Priorities.AUTHORIZATION)
public class MyFilter implements ContainerRequestFilter
@Context // request scoped proxy
private ResourceInfo resourceInfo;
@Override
public void filter(ContainerRequestContext requestContext) throws IOException {
if (resourceInfo.getResourceClass().isAnnotationPresent(MyAnnotationion.class) ||
resourceInfo.getResourceMethod().isAnnotationPresent(MyOtherAnnotation.class)) {
注册过滤器使用
bind(AuthFilter.class).to(ContainerRequestFilter.class).in(Singleton.class);