使用拦截器设置响应头?

pin*_*her 0 java jax-rs interceptor resteasy jakarta-ee

我正在编写 jax-rs 端点。对于某些端点集(现有代码),我想设置一个额外的响应标头,它实际上是在 @AroundInvoke 拦截器中生成的,并设置为 HttpServletRequest 属性。在@AroundInvoke 中,我可以使用@Inject 访问HttpServletRequest。但似乎我无法在同一个拦截器本身中访问 HttpServletResponse 。

似乎我可以使用 PostProcessorInterceptor 但我再次对以下文档感到困惑。

org.jboss.resteasy.spi.interception.PostProcessInterceptor 在 JAX-RS 方法被调用之后但在 MessageBodyWriters 被调用之前运行。它们只能在服务器端使用。如果您需要在可能没有调用任何 MessageBodyWriter 时设置响应标头请使用它们。

我正在使用resteasy,杰克逊。如果我使用 PostProcessorInterceptor 可以注入 HttpServletResponse 吗?或者我可以在那里设置新的 http 标头吗?

任何代码示例/方向将不胜感激。

Max*_*ann 5

随着JAXRS 2(附带的JavaEE 7)你可以使用一个ContainerResponseFilter 也看

public class PoweredByResponseFilter implements ContainerResponseFilter {

    @Inject
    HttpServletRequest request;

    @Override
    public void filter(ContainerRequestContext requestContext, ContainerResponseContext responseContext)
        throws IOException {
            String name = "X-My-Header";
            String value = "";// some data from request
            responseContext.getHeaders().add(name, value);
    }
}
Run Code Online (Sandbox Code Playgroud)