2015-06-09 189 views
0

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

看来我可以用PostProcessorInterceptor做,但我又对以下文档感到困惑。

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

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

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

+0

什么JavaEE的版本是你的工作? –

+0

我不确定...因为它已预先配置。有没有什么简单的方法可以在eclipse中查找?我们正在使用wildfly 8.0,我猜这是java ee 7 – pinkpanther

回答

1

随着JAXRS 2(附带的JavaEE 7)你可以使用一个ContainerResponseFiltersee also

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); 
    } 
} 
+0

PostProcessorInterceptor已被弃用,现在应该用这个来替代那个? – pinkpanther

+0

你能回答这个http://stackoverflow.com/questions/30731511/how-to-use-the-same-containerrequestfilter-for-multiple-projects? – pinkpanther

+0

@pinkpanther当你想修改标题过滤器比拦截器更好。 – mkrakhin