jersey 1.17中ContainerResponseFilter的兼容性

jersey 1.17中ContainerResponseFilter的兼容性,filter,jersey,containers,response,grizzly,Filter,Jersey,Containers,Response,Grizzly,我是否可以在Jersey 1.17中使用ContainerResponseFilter运行CustomFilter extended。 我正在使用GrizzlyWebServer。请建议。下面是我添加过滤器的示例服务器代码 GrizzlyWebServer webServer = new GrizzlyWebServer(.............); .... .... ServletAdapter adapter3 = new ServletAdapter()

我是否可以在Jersey 1.17中使用ContainerResponseFilter运行CustomFilter extended。 我正在使用GrizzlyWebServer。请建议。下面是我添加过滤器的示例服务器代码

   GrizzlyWebServer webServer = new GrizzlyWebServer(.............);
    ....
    ....

    ServletAdapter adapter3 = new ServletAdapter();
    adapter3.addInitParameter("com.sun.jersey.config.property.packages", "com.motilink.server.services");
    adapter3.setContextPath("/");
    adapter3.setServletInstance(new ServletContainer());
    adapter3.addContextParameter(ResourceConfig.PROPERTY_CONTAINER_RESPONSE_FILTERS, PoweredbyResponseFilter.class.getName());
    webServer.addGrizzlyAdapter(adapter3, new String[]{"/"});

   ...
   .....
将属性添加为
init参数
,而不是
上下文参数

...
adapter3.addInitParameter(ResourceConfig.PROPERTY_CONTAINER_RESPONSE_FILTERS, PoweredbyResponseFilter.class.getName());
...
编辑1 从您的回答看来,您实际上是在尝试将Jersey 1.x(1.17)运行时与实现的JAX-RS 2.0提供程序一起使用(JAX-RS 2.0中引入了
ContainerRequestContext
ContainerResponseContext
,Jersey 1.x不知道如何使用它们)

所以我的建议是-删除所有Jersey 1.17依赖项,并用Jersey 2.x依赖项替换它们。看看我们的示例(特别是在类中),了解如何使用JAX-RS应用程序创建Grizzly服务器实例

请注意,只需将属性添加到
init param
s即可,您的资源和提供者(包括响应筛选器)将被扫描并在应用程序中注册。

我的筛选器:

 @FrontierResponse
 @Provider
 public class PoweredbyResponseFilter implements ContainerResponseFilter {

@Override
public void filter(ContainerRequestContext requestContext, ContainerResponseContext responseContext)
        throws IOException {
    System.out.println("hell");
    responseContext.getHeaders().add("X-Powered-By", "Jersey :-)");

}
}

资源类别:

@NameBinding
@Retention(value = RetentionPolicy.RUNTIME)
public @interface FrontierResponse {
}

@GET
@Produces("text/plain")
@Path("plain")
//@FrontierResponse
public String getMessage() {
    System.out.println("hello world called");
    return "Hello World";
}
最后我从浏览器中调用它
http://localhost:4464/plain

你能解释一下吗!!
com.motilink.server.services
包中的JAX-RS资源是否按预期工作?你在服务器日志中看到什么了吗?没有,服务器日志中只有检索到的数据!!没有任何错误消息,只是过滤器没有执行。这是因为使用了jersey v1.17和javax.ws.RSAPI.2.0吗?当然,您不应该将这两者混为一谈。将Jersey 1.x与JAX-RS 1.1 API一起使用,或将Jersey 2.x与JAX-RS 2.0 API一起使用。您能否向我们展示您的过滤器、JAX-RS资源以及如何调用您的服务?请参阅我的回答中的
EDIT 1
。您是否使用Jersey 1?我陷入了类似的问题。你能看一下吗?