SpringBoot关于文件上传超出大小限制--设置了全局异常但是没有正常捕获的情况+捕获后没有正常响应返给前端

article/2025/7/27 22:26:17

项目背景

        一个档案管理系统,在上传比较大的文件时由于系统设置的文件大小受限导致文件上传不了,这时候设置的异常捕捉未能正常报错导致前端页面一直在转圈,实际上后端早已校验完成。

全局异常类设置的捕捉

        添加了@ControllerAdvice以及@RestControllerAdvice

@ExceptionHandler(MaxUploadSizeExceededException.class)
@ResponseBody
public AjaxResponse handleMaxUploadSizeExceededException(MaxUploadSizeExceededException e) {log.error("文件上传大小超出限制", e);return AjaxResponse.error("上传文件过大,超出了允许的最大值");
}

文件上传的Controller方法上也添加了异常捕捉块

try{........//文件处理
catch (org.springframework.web.multipart.MaxUploadSizeExceededException e) {return AjaxResponse.error("上传文件过大,超出了允许的最大值: " + e.getMessage());}
}

依旧报错没有正常返回报错信息

查看报错的堆栈信息了解问题原因

        1.异常发生的时机:从异常堆栈可以看出,MaxUploadSizeExceededException是在Spring MVC的请求处理早期阶段抛出的,具体是在StandardMultipartHttpServletRequest.parseRequest方法中,这发生在请求到达控制器方法之前。  

        2.  异常处理流程:异常堆栈显示,异常是在Tomcat的Request.parseParts方法中首先被触发的,然后被包装成IllegalStateException,最终被Spring包MaxUploadSizeExceededException。 

        3.  过滤器链干扰:从堆栈信息可以看到,请求经过了多个过滤器,包括Shiro的过滤器链(ProxiedFilterChain、AdviceFilter等)。这些过滤器可能在异常被抛出后就处理了请求,导致异常没有传递到DispatcherServlet的异常处理机制。

为什么全局异常处理器没有生效

        尽管类中正确定义了处理MaxUploadSizeExceededException的方法,但它没有生效的原因可能是: 1.  异常被提前处理:异常在到达DispatcherServlet的异常处理机制之前就被处理了。从堆栈信息看,异常是在StandardMultipartHttpServletRequest.parseRequest方法中被捕获并处理的。          2.  过滤器链中断:Shiro或其他过滤器可能捕获了异常并进行了处理,阻止了异常继续传播到全局异常处理器。  

        3.  请求解析阶段异常:文件上传大小超限的异常发生在请求解析阶段,这个阶段早于Spring MVC的异常处理机制被激活的时机

设置了Filter过滤器之后异常正常捕获但前端响应依旧不可行        

        尝试了在过滤器链中设置了最高的优先级去处理文件上传类型的错误,虽然异常是正常捕获了,但前端一直处在长时间的调用当中,并没有反馈调用信息,这个时候应该就不是SpringMVC的问题,可能发生在内置服务器或者是Http请求协议那一块,简便点说就是服务器在你捕获到这个异常之前就把这个问题处理了,虽然你后面依旧可以正常捕获,下面是打印的响应请求

2025-05-30 14:23:35.129  INFO 1792  --- [http-nio-8070-exec-5]  com.yys.config.exception.WebExceptionHandler.handleMaxUploadSizeExceededException(WebExceptionHandler.java:317) : Ajax response: AjaxResponse(isok=false, code=413, message=文件大小超过限制,最大允许123123, data=null)
2025-05-30 14:23:35.130  WARN 1792  --- [http-nio-8070-exec-5]  org.springframework.web.servlet.handler.AbstractHandlerExceptionResolver.logException(AbstractHandlerExceptionResolver.java:199) : Resolved [org.springframework.web.multipart.MaxUploadSizeExceededException: Maximum upload size exceeded; nested exception is java.lang.IllegalStateException: org.apache.tomcat.util.http.fileupload.impl.FileSizeLimitExceededException: The field file exceeds its maximum permitted size of 213909504 bytes.]

SpringBoot内置服务器Tomcat参数设置

        查阅一些资料之后,就可以发现Tomcat服务器对上传的文件是有要求限制的,这个配置是用来设置 Tomcat 允许接收的最大请求内容大小(包括请求头和文件内容)。当上传的文件大小超过这个值时,Tomcat 会直接丢弃超出部分并抛出异常。

设置 server.tomcat.max-swallow-size=-1 后,表示不限制请求体的大小,因此就能正确接收到超大的文件上传请求并返回相应的错误信息。

总结一下:

server.tomcat.max-swallow-size 默认情况下有一个限制,如果超出了这个限制,Tomcat 就会截断请求并返回错误。

通过设置为 -1,可以让 Tomcat 接受任意大小的请求体,确保上传过程不被中断。

 


http://www.hkcw.cn/article/VuSQuXdJHv.shtml

相关文章

Shopify 主题开发:页脚信息架构搭建技巧

在Shopify主题开发中,页脚信息架构的搭建对于提升用户体验、增强品牌形象至关重要。以下是一些页脚信息架构搭建的技巧: 一、明确页脚功能 页脚通常包含重要信息和链接,如公司介绍、联系方式、社交媒体链接、隐私政策、退换货政策等。在搭建…

栈内行为分析

栈内行为分析 一、源码分析 我们以以下简单的 C 程序为例&#xff0c;通过 GDB 动态调试分析函数调用过程中的栈内布局变化&#xff1a; #include <stdio.h> int add(){int a 10;int b 20;return (a b); }int main() {add();return 0; }编译为 32 位程序&#xff1a…

embbeding 视频截图

Embedding是什么&#xff1f;有什么作用&#xff1f;是怎么得到的&#xff1f;_哔哩哔哩_bilibili

单细胞注释前沿:CASSIA——无参考、可解释、自动化细胞注释的大语言模型

细胞类型注释是单细胞RNA-seq分析的重要步骤&#xff0c;目前有许多注释方法。大多数注释方法都需要计算和特定领域专业知识的结合&#xff0c;而且经常产生不一致的结果&#xff0c;难以解释。大语言模型有可能在减少人工输入和提高准确性的同时扩大可访问性&#xff0c;但现有…

7.CircuitBreaker断路器

目录 一、Hystrix目前维护状态 二、断路器概述 三、Circuit Breaker简介 四、Resilience4J简介 五、Resilience4j 功能 六、案例实战 1.熔断(CircuitBreaker)(服务熔断服务降级) 断路器3个状态的转换 断路器所有配置参数参考 熔断降级案例需求说明 按照COUNT_BASED(计…

一周学会Pandas2之Python数据处理与分析-数据重塑与透视-unstack() - 解堆 (行 -> 列)

锋哥原创的Pandas2 Python数据处理与分析 视频教程&#xff1a; 2025版 Pandas2 Python数据处理与分析 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili unstack() 是 pandas 中用于数据重塑的重要方法&#xff0c;它与 stack() 互为逆操作。unstack() 的主要功能是将行索…

算法题(159):快速幂

审题&#xff1a; 本题需要我们计算出(a^b)%c的值&#xff0c;并按照规定格式输出 思路&#xff1a; 方法一&#xff1a;暴力解法 我们直接循环b次计算出a^b,然后再取余c&#xff0c;从而得出最终结果 时间上&#xff1a;会进行2^31次&#xff0c;他的数量级非常大&#xff0c;…

TCP通信与MQTT协议的关系

1. MQTT 处理核心&#xff08;Mqtt_Pro&#xff09; void Mqtt_Pro(void) { MQTT_Init(); // 初始化MQTT协议栈&#xff08;连接参数、缓冲区等&#xff09; MQTT_SendPro(); // 处理MQTT发送&#xff08;封装消息&#xff0c;调用TCP发送&#xff09; MQTT_RecPro();…

kanass V1.1.3版本发布,支持需求评审和Jira的数据导入

Kanass是一款国产开源免费、简洁易用的项目管理工具&#xff0c;包含项目管理、项目集管理、事项管理、工时管理、统计分析相关模块。本周kanass发布V1.1.3版本&#xff0c;增加了需求评审和jira数据的导入功能&#xff0c;优化了页面的展示效果。 1、版本更新日志 新增 ➢ …

OpenCV---minAreaRect

一、基本概念与用途 minAreaRect是OpenCV中用于计算点集的最小面积旋转矩形的函数。在计算机视觉领域&#xff0c;它常被用于&#xff1a; 目标检测中获取倾斜对象的边界框&#xff08;如倾斜的车牌、文本行、工业零件&#xff09;形状分析与识别&#xff08;如确定物体的主方…

颈部异常姿态背后的隐秘困扰

在身体的自然姿态中&#xff0c;颈部本该灵活自如地支撑头部&#xff0c;然而&#xff0c;有一种状况却打破了这份平衡&#xff0c;那就是痉挛性斜颈。它悄无声息地出现&#xff0c;让颈部肌肉不受控制地收缩&#xff0c;迫使头部偏向一侧&#xff0c;或前倾后仰&#xff0c;形…

电路笔记(通信):CAN 仲裁机制(Arbitration Mechanism) 位级监视线与特性先占先得非破坏性仲裁

CAN总线机制 位级监视&#xff08;bit monitoring&#xff09; 位级监视&#xff08;bit monitoring&#xff09;&#xff1a;在 CAN 总线通信中&#xff0c;在每一位发送时进行实时总线监控。 CAN 总线采用 “广播总线监控” 的方式传输数据。在发送每一位的同时&#xff0c…

AAAI 2025 | 解决医学图像分割软边界与共现难题,对比度驱动医学图像分割的通用框架 ConDSeg

论文题目:ConDSeg: A General Medical Image Segmentation Framework via Contrast-Driven Feature Enhancement 论文地址:https://arxiv.org/pdf/2412.08345 Github地址:https://github.com/Mengqi-Lei/ConDSeg ConDSeg:一种基于对比度驱动特征增强的通用医学图像分割框架…

Python图片格式批量转换器教程

&#x1f4da; 前言 编程基础第一期《11-30》-- 在图像处理工作中&#xff0c;我们经常需要将大量图片从一种格式转换为另一种格式。本教程将介绍如何使用Python的Pillow库开发一个简单但功能强大的图片格式批量转换器&#xff0c;帮助你高效处理图片格式转换任务。 目录 &…

Java Math类API全解析

Java中Math类的常用API Java的Math类提供了丰富的数学计算方法&#xff0c;包含静态方法可直接调用&#xff0c;适用于基本数值运算、三角函数、指数对数等场景。以下是常用API分类说明&#xff1a; 基本运算方法 // 绝对值 int absValue Math.abs(-5); // 5// 最大值与…

飞牛fnNAS的Docker应用之迅雷篇

目录 一、“迅雷”应用安装 二、启动迅雷 三、迅雷账号登录 四、修改“迅雷”下载保存路径 1、下载路径准备 2、停止“迅雷”Docker容器 3、修改存储位置 4、重新启动Docker容器 5、再次“启用”迅雷 五、测试 1、在PC上添加下载任务 2、手机上管理 3、手机添加下…

Science Advances 上海理工大学与美国杜克大学(Duke University)共同开发了一种仿生复眼相机

编辑丨%科学家开发了一种 AI 辅助的仿生复眼相机。炎炎夏日&#xff0c;相信各位读者都有被蚊子骚扰过的恼火记忆。但往往想要清剿蚊子的时候&#xff0c;却被它灵巧地躲开&#xff0c;再难找到。诸如蚊子这种节肢动物的视觉系统已经进化了 5 亿多年&#xff0c;从寒武纪一直到…

C# 结合PaddleOCRSharp搭建Http网络服务

Windows打开端口&#xff1a; 控制面板 > 系统和安全 > 防火墙> 高级设置 → 入站规则 → 右侧选择 → 新建规则 → 端口 → 协议类型 TCP→ 端口 using System; using System.Drawing; using System.IO; using System.Net; using System.Text; using System.Threadi…

Real SQL Programming

目录 SQL in Real Programs Options Stored Procedures Advantages of Stored Procedures Parameters in PSM SQL in Real Programs We have seen only how SQL is used at the generic query interface --- an environment where we sit at a terminal and ask queries …

华为OD机试真题——跳格子3(2025A卷:200分)Java/python/JavaScript/C++/C语言/GO六种最佳实现

2025 A卷 200分 题型 本文涵盖详细的问题分析、解题思路、代码实现、代码详解、测试用例以及综合分析; 并提供Java、python、JavaScript、C++、C语言、GO六种语言的最佳实现方式! 2025华为OD真题目录+全流程解析/备考攻略/经验分享 华为OD机试真题《跳格子3》: 目录 题目名称…