JAX-RS将标头添加到分块响应

时间:2014-04-11 12:53:23

标签: java java-ee jboss jax-rs resteasy

我的JBOSS 7.1.1服务器上的REST API服务出现问题 现在我使用RESTEasy实现,我有以下过滤器将CORS标头添加到响应中:

@WebFilter(filterName = "HeaderFilter", urlPatterns = {"/*"})
public class HeaderFilter implements Filter {

    public void init(FilterConfig arg0) throws ServletException{}
    public void destroy(){}

    public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException, ServletException
    {
        //Just continue the request
        filterChain.doFilter(request, response);

        //After the request add the response headers
        HttpServletResponse responseObj = (HttpServletResponse)response;
        responseObj.addHeader("Access-Control-Allow-Origin", "*");
        responseObj.addHeader("Access-Control-Allow-Methods", "GET,POST,PUT,DELETE,OPTIONS");
        responseObj.addHeader("Access-Control-Allow-Headers", "X-Requested-With, Content-Type, Content-Length");
    }
}

我的问题是服务器有时会选择发送部分响应 通过Transfer-Encoding:chunked" protocol"。
这没关系,我没有问题,但是当它执行此操作时,它不再添加CORS头。应用程序的客户端现在无法使用数据,我无法弄清楚如何将CORS头添加到最终响应中。

你们知道如何解决这个问题吗?

编辑:顺便说一下,我使用杰克逊将懒惰的模型变成了JSON,所以我觉得它不像设置它那么容易内容长度。

1 个答案:

答案 0 :(得分:0)

我已经发现问题了。如果transfer-encode是chunked,那么filterChain.doFilter之后的响应头是不可编辑的。所以responseObj.addHeader之后不要编辑响应头。所以你必须在{之前做{1}}。像这样

doFilter