SpringBoot提交2MB以上文件POST报缺少certThumb参数异常
问题描述
Spring Boot 2.0.3.RELEASE版本开发场景下,页面提交大小为2MB及以上的文件POST请求时触发参数错误,经Chrome开发者工具确认,相关参数已正常携带在POST请求中,无法定位报错原因。
核心异常
org.springframework.web.bind.MissingServletRequestParameterException: Required String parameter 'certThumb' is not present
异常抛出点为Spring MVC参数解析器,调用链路经过Spring Security、Keycloak安全过滤器链,最终由Tomcat容器接收请求。
问题根因
Spring Boot 2.0.x版本内嵌Tomcat默认配置的POST请求最大允许大小为2MB,当请求总大小(包含上传文件、普通表单参数)超过该阈值时,Tomcat不会直接返回413 Request Entity Too Large错误,而是静默丢弃请求体内的所有表单参数,最终导致Controller层无法读取certThumb这类必填的@RequestParam参数,抛出参数缺失异常。
该问题的触发阈值与描述的2MB复现条件完全匹配。
解决方案
根据部署方式选择对应配置调整即可:
- 内嵌Tomcat启动(Spring Boot默认启动方式)
在项目配置文件中同步调整Tomcat POST限制和Spring Multipart上传限制,按需设置阈值,以下为10MB阈值的配置示例:
properties格式配置(application.properties):
yaml格式配置(application.yml):# Tomcat POST请求最大大小限制 server.tomcat.max-http-post-size=10MB # 单文件最大上传大小 spring.servlet.multipart.max-file-size=10MB # 整个请求最大大小 spring.servlet.multipart.max-request-size=10MBserver: tomcat: max-http-post-size: 10MB spring: servlet: multipart: max-file-size: 10MB max-request-size: 10MB - 外置Tomcat部署
修改Tomcat配置目录下的conf/server.xml文件,找到HTTP服务对应的Connector节点,添加maxPostSize属性(单位为字节,10MB对应值为10485760):<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" maxPostSize="10485760" />
配置完成后重启服务,再次提交2MB以上文件即可验证问题修复。
内容的提问来源于stack exchange,提问作者Joao Paulo de Lima Boaventura
相关产品推荐
相关产品推荐

