You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

Spring Boot 2 REST API部署独立Tomcat 8.5响应截断至8KB问题

解决Spring Boot WAR包部署到Tomcat 8.5后响应被截断8KB的问题

兄弟,我之前也踩过这个坑!这事儿大概率是独立Tomcat的默认配置在搞鬼,跟你慢慢说:

问题根源

Spring Boot自带的嵌入式Tomcat,默认把maxSwallowSize参数设成了-1(也就是不限制响应大小),所以你本地用bootRun跑的时候啥事没有。但Tomcat 8.5的独立版默认NIO连接器的maxSwallowSize是8192字节(刚好8KB),当你的接口返回的响应数据超过这个阈值,Tomcat就会直接截断内容,导致你拿到不完整的响应。

两种解决办法

方法1:修改Tomcat全局配置(简单直接)

找到你Tomcat安装目录下的conf/server.xml,找到NIO连接器的<Connector>标签(一般protocol属性是org.apache.coyote.http11.Http11NioProtocol),加上maxSwallowSize="-1"

<Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol"
           connectionTimeout="20000"
           redirectPort="8443"
           maxSwallowSize="-1"/>

改完重启Tomcat就生效了,不过这个配置会影响Tomcat上所有的应用。

方法2:在Spring Boot项目里自定义配置(只影响你的应用)

如果不想动Tomcat全局配置,可以在你的Spring Boot项目里加个配置类,专门给部署的Tomcat设置参数:

import org.apache.catalina.connector.Connector;
import org.springframework.boot.web.embedded.tomcat.TomcatConnectorCustomizer;
import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
import org.springframework.boot.web.servlet.server.ServletWebServerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class TomcatCustomConfig {
    @Bean
    public ServletWebServerFactory servletWebServerFactory() {
        TomcatServletWebServerFactory factory = new TomcatServletWebServerFactory();
        factory.addConnectorCustomizers((TomcatConnectorCustomizer) connector -> {
            // 禁用响应大小限制
            connector.setMaxSwallowSize(-1);
        });
        return factory;
    }
}

把这个类加到你的项目里,重新打包WAR部署就OK了,这个配置只会对你的应用生效,不影响其他应用。

额外检查点

别忘了确认下你的ResultData里的data确实生成了超过8KB的内容,排除是代码逻辑导致数据本身不完整的情况哦!

内容的提问来源于stack exchange,提问作者lbednaszynski

火山引擎 最新活动