如何使用Jersey的内部路由机制来提取类/方法引用?

时间:2015-08-01 01:59:28

标签: java routing jersey jax-rs

我正在运行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"中提取值MyAnnotationMyOtherAnnotation泽西岛自己的servlet处理请求。

此过滤器逻辑应该能够适用于所有请求和注册的所有资源。

有没有办法访问Jersey的内部路由机制,以获取Jersey将发送请求的类/方法引用?

我也对其他建议持开放态度,但最好不要试图通过自己阅读@Path注释来破解我自己的路由机制。

1 个答案:

答案 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);