Java ServletResponse.setBufferSize不';你不能在Tomcat7中工作吗?

Java ServletResponse.setBufferSize不';你不能在Tomcat7中工作吗?,java,tomcat,servlets,tomcat7,Java,Tomcat,Servlets,Tomcat7,我正在使用ServletResponse.setBufferSize增加响应的缓冲区大小,但是Tomcat7仍然抛出一个异常,即缓冲区大小不够大。这是Tomcat 7.0.32中的一个bug吗 这是我的伪代码- @Override protected void writeInternal(Object o, HttpOutputMessage outputMessage) throws IOException, HttpMessageNotWritableException {

我正在使用ServletResponse.setBufferSize增加响应的缓冲区大小,但是Tomcat7仍然抛出一个异常,即缓冲区大小不够大。这是Tomcat 7.0.32中的一个bug吗

这是我的伪代码-

@Override
protected void writeInternal(Object o, HttpOutputMessage outputMessage)
    throws IOException, HttpMessageNotWritableException {

    if (some condition)
    {
        ((ServletServerHttpResponse)outputMessage).getServletResponse().setBufferSize(Integer.MAX_VALUE);
        outputMessage.getHeaders().set("Custom-Header", gson.toJson(big payload));
    }

    // ...
这是个例外-

org.apache.coyote.http11.HeadersTooLargeException
:试图向响应头写入的数据超过缓冲区中的可用空间。在连接器上增加maxHttpHeaderSize或在响应头中写入较少的数据

我需要重置缓冲区吗<代码>重置()不起作用


编辑:我希望能够根据“某些条件”更改单个响应级别的最大头大小。

您需要修改server.xml中HTTP连接器的maxHttpHeaderSize,而不是代码

请参见

消息是关于头大小,而不是缓冲区总大小。从

maxHttpHeaderSize

请求和响应HTTP标头的最大大小,以字节为单位指定。如果未指定,则此属性设置为8192(8 KB)


你在做什么

您正在为writig repsonse body设置缓冲区的大小。它与响应头无关。这主要用于达到缓冲区大小后刷新响应

你需要做什么


您需要在

中设置
maxHttpHeaderSize
属性,我无法更改全局设置。我正在寻找单个响应级别的解决方案。说真的,要么增加全局限制,要么为响应创建不超过8KB的标题。我无法更改全局设置。我正在寻找单个响应级别的解决方案。将有效负载作为响应主体传递,而不是作为
自定义标题传递。
我无法更改全局设置。我正在寻找个人响应级别的解决方案。