【问题标题】:How can you access the Response object inside ContainerResponseFilter?如何访问 ContainerResponseFilter 中的 Response 对象?
【发布时间】:2014-11-18 02:16:04
【问题描述】:

在 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 对象来构建。那么为什么我不能从过滤器中访问它呢?我错过了什么吗?

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

【问题讨论】:

    标签: java jersey jax-rs jersey-2.0


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2021-07-27
        • 2020-05-03
        • 2022-12-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-07-04
        • 1970-01-01
        • 2019-10-10
        相关资源
        最近更新 更多