如何访问ContainerResponseFilter中的Response对象?

时间:2014-09-23 18:42:52

标签: java jersey jax-rs jersey-2.0

在Jersey 1中,您可以创建容器响应过滤器并访问响应:

public ContainerResponse filter(ContainerRequest request, ContainerResponse response)
{
   Response r = response.getResponse();

   // Now I have access to Reponse.getMetadata(), etc.
}

但在Jersey 2中,ContainerResponseFilter只给出了响应上下文:

public void filter(ContainerRequestContext  requestContext,
                   ContainerResponseContext responseContext) throws IOException
{
    // responseContext gives me the entity, but I want the JAX-RS Response object that my resources created
}

ContainerResponseContext的实现是ContainerResponse,需要要构建的JAX-RS Response对象。那么为什么我不能从过滤器中访问它?我错过了什么吗?

我遇到的问题是我的资源都构建了Response对象并将元数据附加到它们,我想要一个可以检查这个元数据的响应过滤器。无法访问原始响应,这似乎不可能。

2 个答案:

答案 0 :(得分:0)

根据Javadocs API,Response.getMetadata()被认为已弃用,即使它没有标记为2.12。首选方法是使用HTTP标头。

答案 1 :(得分:0)

您可以通过实现自定义ResourceMethodInvocationHandler来访问每个响应对象。看看我的答案@ Registering a custom ResourceMethodInvocationHandler in Jersey