无法运行使用ContainerResponseFilter实现的过滤器

时间:2013-07-27 01:46:30

标签: java jersey jax-ws jax-rs

我正在尝试通过公共过滤器解析GET响应,并根据收到的内容向客户端发送响应。但是我无法执行Filter类。我在下面添加了代码段。任何帮助将不胜感激

@FrontierResponse
@Provider
public class PoweredbyResponseFilter implements ContainerResponseFilter {

@Override
public void filter(ContainerRequestContext requestContext, ContainerResponseContext responseContext)
        throws IOException {

    if (requestContext.getMethod().equals("GET")) {
        System.out.println("hellos");
    }

    //responseContext.getHeaders().add("X-Powered-By", "Jersey :-)");
}

}

我的自定义注释

@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(value = RetentionPolicy.RUNTIME)
@NameBinding
public @interface FrontierResponse {
}

这是我的资源类

@GET
@FrontierResponse
@Produces({MediaType.TEXT_HTML, MediaType.APPLICATION_JSON})
public List<String> list() {...}

我正在使用的其他信息

jersey jersey-bundle-1.17.jar javax.ws.rs-API-2.0.jar

1 个答案:

答案 0 :(得分:1)

您需要通过@FrontierResponse来装饰资源类的方法,而不是资源类。或者,如果要对所有请求使用过滤器,则可以注释Application类的扩展名。 Check spec for more details.

编辑: 从v2.0开始,@NameBinding在JAX-RS中。您需要使用该规范的实现,即Jersey 2.x.在球衣1.x中,这个注释将被忽略。