You need to enable JavaScript to run this app. Spring Boot全局异常处理器如何捕获MaxUploadSizeExceededException
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot全局异常处理器如何捕获MaxUploadSizeExceededException

问题解决:Spring Boot无法捕获MaxUploadSizeExceededException异常

核心原因

你当前的全局异常处理器无法捕获该异常主要有3个常见触发点:

  • @ControllerAdvice限定了仅扫描storageservice.resource包下的Controller异常,而MaxUploadSizeExceededException是在DispatcherServlet解析multipart请求的阶段抛出,此时还未进入对应Controller的逻辑,被限定范围的异常处理器无法生效
  • Tomcat内置的maxSwallowSize参数默认值小于你配置的文件上传上限,请求体超过该值时Tomcat会直接断开连接,不会将异常抛给Spring处理链
  • 自定义前置过滤器提前捕获处理了异常,没有流转到SpringMVC的异常处理链路

解决方案

1. 调整全局异常处理器配置

移除@ControllerAdvice的包范围限定,REST服务建议直接使用@RestControllerAdvice简化返回配置:

@RestControllerAdvice
public class GlobalExceptionHandler {
    @ExceptionHandler(MaxUploadSizeExceededException.class)
    @ResponseStatus(HttpStatus.PAYLOAD_TOO_LARGE)
    public ResponseEntity<Object> handleMaxUploadSizeExceededException(MaxUploadSizeExceededException maxUploadSizeExceededException,
                                                                       WebRequest request) {
        System.out.println("Inside handle max file upload size..");
        return buildErrorResponse(maxUploadSizeExceededException, HttpStatus.PAYLOAD_TOO_LARGE);
    }
    // 保留原有buildErrorResponse方法实现
}

2. 补全application.properties配置

# 单文件大小上限
spring.servlet.multipart.max-file-size=10MB
# 整个multipart请求总大小上限
spring.servlet.multipart.max-request-size=10MB
# 调整Tomcat接收请求体上限,设置为略大于请求总大小即可
server.tomcat.max-swallow-size=20MB

3. 排查自定义过滤器

检查栈信息中提到的AsrExceptionFilter等自定义前置过滤器,确认没有提前捕获吞掉MaxUploadSizeExceededException,若有捕获逻辑请调整为将该异常继续向上抛出到SpringMVC处理链。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.13 15:57:01