jersey 1.17中ContainerResponseFilter的兼容性
我是否可以在Jersey 1.17中使用ContainerResponseFilter运行CustomFilter extended。 我正在使用GrizzlyWebServer。请建议。下面是我添加过滤器的示例服务器代码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()
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?我陷入了类似的问题。你能看一下吗?