在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对象并将元数据附加到它们,我想要一个可以检查这个元数据的响应过滤器。无法访问原始响应,这似乎不可能。
答案 0 :(得分:0)
根据Javadocs API,Response.getMetadata()被认为已弃用,即使它没有标记为2.12。首选方法是使用HTTP标头。
答案 1 :(得分:0)
您可以通过实现自定义ResourceMethodInvocationHandler来访问每个响应对象。看看我的答案@ Registering a custom ResourceMethodInvocationHandler in Jersey