Java JAX-RS向分块响应添加头

Java JAX-RS向分块响应添加头,java,jakarta-ee,jboss,jax-rs,resteasy,Java,Jakarta 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{}

我的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");
    }
}
我的问题是服务器有时选择部分发送响应。
通过传输编码:分块的“协议”。
这并不重要,我对此没有问题,但当它这样做时,它不再添加CORS头。应用程序的客户端现在无法使用数据,我也不知道如何将CORS头添加到最终响应中

你们知道我怎么解决这个问题吗


编辑:顺便说一句,我正在使用Jackson将我的延迟加载模型转换为JSON,因此我认为这并不像设置内容长度那么简单。

我发现了问题。如果传输编码是分块的,响应头在
filterChain.doFilter
之后不可编辑。因此
responseObj.addHeader
之后不可编辑响应头。因此必须在
doFilter
之前执行此操作。如下所示

@WebFilter(filterName=“HeaderFilter”,urlPatterns={”/*“})
公共类HeaderFilter实现过滤器{
public void init(FilterConfig arg0)抛出ServletException{}
public void destroy(){}
public void doFilter(ServletRequest请求、ServletResponse响应、FilterChain FilterChain)抛出IOException、ServletException
{
//在请求之前添加响应头
HttpServletResponseOBJ=(HttpServletResponse)响应;
responseObj.addHeader(“访问控制允许源代码”、“*”);
addHeader(“访问控制允许方法”、“获取、发布、放置、删除、选项”);
responseObj.addHeader(“访问控制允许头”,“X请求的,内容类型,内容长度”);
//继续请求就行了
filterChain.doFilter(请求、响应);
}
}

您确定第一个区块没有CORS头吗?我不确定,第一个区块可能会有这些头,因为过滤器确实在运行,我已经用SYSOUT消息对此进行了测试。然而,问题是请求的结果没有正确的头,例如,它们不会出现在我的dev http客户端中,也不会出现在使用数据的JS应用程序中@AndreiI@Jcocqvan,你找到解决办法了吗?我现在面临着类似的问题。