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

Spring Boot整合Thymeleaf时如何处理Tomcat的SizeLimitExceededException

问题解决方案

1. 修正全局异常处理类

你之前的全局异常处理类未添加@ControllerAdvice注解,Spring无法识别为异常处理组件,调整后代码如下:

import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.multipart.MaxUploadSizeExceededException;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;

@ControllerAdvice
public class FileUploadExceptionAdvisor {

    @ExceptionHandler(MaxUploadSizeExceededException.class)
    public String handleMaxUploadSizeExceeded(MaxUploadSizeExceededException e, RedirectAttributes redirectAttributes) {
        // 自定义错误提示
        redirectAttributes.addFlashAttribute("globalError", "上传文件总大小不能超过50MB,请调整后重新提交");
        redirectAttributes.addFlashAttribute("contactEmail", new ContactEmail());
        // 重定向回表单页,注意替换为你实际的表单访问路径
        return "redirect:/contactForm";
    }
}

注意:不需要单独处理SizeLimitExceededException,它是MaxUploadSizeExceededException的根异常,Spring已经做了封装,处理前者即可。

2. 调整application.properties配置

添加延迟解析multipart请求的配置,默认multipart请求会在进入控制器前解析,此时抛出的异常无法被@ControllerAdvice捕获:

########################Tomcat file size config############################
spring.servlet.multipart.max-file-size=50MB
spring.servlet.multipart.max-request-size=50MB
# 开启延迟解析,让异常进入控制器处理阶段
spring.servlet.multipart.resolve-lazily=true
# 设为-1表示不限制Tomcat吞噬请求体的大小,避免大文件上传时Tomcat直接断开连接
server.tomcat.max-swallow-size=-1

3. 调整Thymeleaf模板添加全局错误提示

在表单上方添加全局错误提示区域,用于展示超出大小限制的错误:

<div th:if="${globalError != null}" style="color: red; margin-bottom: 10px;" th:text="${globalError}"></div>
<form action="#" th:action="@{/sendHTMLMail}" th:object="${contactEmail}" enctype="multipart/form-data" method="post">
    <!-- 原有表单内容保持不变 -->
</form>

4. 确认表单访问路径

确保你项目中访问联系表单的路径和异常处理中重定向的路径一致,例如你表单的访问路径是/contactForm,返回视图的控制器代码示例如下:

@GetMapping("/contactForm")
public String showForm(Model model) {
    if (!model.containsAttribute("contactEmail")) {
        model.addAttribute("contactEmail", new ContactEmail());
    }
    return "contactForm.html";
}

原方案失效原因说明

  • 未给全局异常类添加@ControllerAdvice注解,Spring未注册该异常处理组件
  • 默认multipart请求解析时机过早,异常抛出时还未进入Spring MVC的异常处理流程
  • 异常处理返回视图时未使用重定向,导致模型绑定数据丢失,页面渲染异常

内容的提问来源于stack exchange,提问作者Илиян Д.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 21:15:03