You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

部署在Apache Tomcat 9上的Spring Boot应用拒绝大于19KB的POST请求并返回400 BAD REQUEST问题咨询

排查思路与解决方案

我来帮你定位这个POST请求大小限制的问题。从你提供的配置和代码来看,虽然你已经在Tomcat的server.xml里设置了maxPostSize="-1",但还是出现了19KB的限制,大概率是Spring Boot的自动配置覆盖了Tomcat参数,或者Tomcat的Connector配置不全导致的。下面是具体的排查步骤和解决办法:

一、排查Spring Boot的内置配置

Spring Boot即使部署在外部Tomcat上,它的自动配置也可能会对Tomcat的参数产生影响。你需要检查应用的配置文件(application.properties或application.yml),确认是否设置了请求大小限制:

解决方案:添加Spring Boot的请求大小配置

在application.properties中添加以下配置:

# 允许POST请求体的最大大小,-1表示无限制
server.tomcat.max-http-post-size=-1
# 控制整个HTTP请求的最大大小(包含头和体),-1表示无限制
server.max-http-request-size=-1

如果使用application.yml,则配置如下:

server:
  tomcat:
    max-http-post-size: -1
  max-http-request-size: -1

二、完善Tomcat的Connector配置

你的server.xml里有两个Connector(HTTP和HTTPS),目前只有HTTPS Connector设置了maxSwallowSize="-1",而HTTP Connector缺少这个参数。maxSwallowSize用于控制Tomcat在处理完请求后,允许接收客户端剩余数据的最大量,设置为-1可以避免因客户端持续发送数据而触发的400错误。

解决方案:更新HTTP Connector配置

修改server.xml中的HTTP Connector,添加maxSwallowSize="-1":

<Connector 
    connectionTimeout="20000" 
    URIEncoding="UTF-8" 
    address="0.0.0.0" 
    redirectPort="8443" 
    maxPostSize="-1" 
    useIPVHosts="true" 
    maxSwallowSize="-1" />

三、获取详细错误日志定位根因

400 BAD REQUEST可能有多种原因(比如JSON解析失败、请求格式错误、校验失败等),仅凭返回码很难确定具体问题。你可以开启调试日志来获取更多信息:

解决方案:开启调试日志

在application.properties中添加日志配置:

logging.level.org.apache.tomcat=DEBUG
logging.level.org.springframework.web=DEBUG

重启应用后,再次发送超过19KB的请求,查看日志中是否有具体的异常信息(比如Request exceeded maximum size、JSON解析错误等),这能帮你精准定位问题。

四、验证请求格式正确性

确保你发送的POST请求的Content-Type设置为application/json,如果格式不正确,即使请求体大小符合要求,也可能触发400错误。同时,检查BookModel中的嵌套对象(比如MediaModel、TableContentsModel)是否能被正确序列化/反序列化,避免因JSON结构不匹配导致的解析失败。

五、验证配置生效

完成上述配置后,重启Tomcat和你的Spring Boot应用,再次测试不同大小的POST请求,确认超过19KB的请求能正常处理。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 06:07:39