
Spring MVC 6 默认不启用 multipart 支持,需同时配置 StandardServletMultipartResolver Bean 和 Servlet 级 multipart-config,缺一不可;否则会报“Unable to process parts as no multi-part configuration has been provided”。
spring mvc 6 默认不启用 multipart 支持,需同时配置 `standardservletmultipartresolver` bean 和 servlet 级 `multipart-config`,缺一不可;否则会报“unable to process parts as no multi-part configuration has been provided”。
在 Spring MVC 6(基于 Jakarta EE 9+)中,@MultipartConfig 注解仅对传统 @WebServlet 生效,对 DispatcherServlet 无效——因为 DispatcherServlet 是由容器(如 Tomcat)注册的普通 Servlet,其 multipart 行为必须通过 web.xml 或编程式 Servlet 注册显式声明。这也是你添加 @MultipartConfig 类注解和 MultipartResolver Bean 后仍报错的根本原因:服务端 Servlet 层未开启 multipart 解析能力,请求体甚至无法被容器解析为 Part,MultipartResolver 根本没有机会执行。
✅ 正确解决方案需两步协同:
1. 声明标准 multipart 解析器 Bean
移除冗余的 @EnableWebMvc(Spring Boot 场景下通常不需要)和重复 Bean,仅保留一个命名规范、类型明确的 MultipartResolver:
@Configuration
public class MvcConfig implements WebMvcConfigurer {
@Bean
public MultipartResolver multipartResolver() {
return new StandardServletMultipartResolver();
}
}⚠️ 注意:Bean 名必须为 multipartResolver(Spring MVC 约定名称),且返回类型必须是 MultipartResolver 接口实现。StandardServletMultipartResolver 不做文件解析,仅将容器已解析的 Part 对象桥接到 Spring 的 MultipartFile 抽象。
2. 在 web.xml 中为 DispatcherServlet 启用 multipart 支持
这是关键一步!在 WEB-INF/web.xml 的 <servlet> 定义内添加 <multipart-config />:
<servlet> <servlet-name>dispatcher</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <load-on-startup>1</load-on-startup> <multipart-config /> </servlet> <servlet-mapping> <servlet-name>dispatcher</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping>
该配置等价于在 ServletRegistrationBean 中调用 .setMultipartConfig(new MultipartConfigElement(...)),它告诉 Tomcat:此 Servlet 需要支持 multipart/form-data 请求体解析,并设置默认大小限制(如需自定义,可补充子元素):
<multipart-config> <max-file-size>10MB</max-file-size> <max-request-size>20MB</max-request-size> <file-size-threshold>0</file-size-threshold> </multipart-config>
✅ 验证与注意事项
- 单元测试通过是因为 MockMvc 模拟了已解析的 Part,绕过了容器层 multipart 初始化;而 Postman 请求直连 Tomcat,触发真实 Servlet 生命周期,故失败。
- 若使用 Spring Boot(推荐),无需 web.xml:只需在 application.properties 中启用自动配置:
spring.servlet.multipart.enabled=true spring.servlet.multipart.max-file-size=10MB spring.servlet.multipart.max-request-size=20MB
Spring Boot 2.7+(兼容 Spring 6)会自动注册 StandardServletMultipartResolver 并为嵌入式 Tomcat 设置 MultipartConfigElement。
- 确保依赖为 jakarta.servlet-api(非 javax.servlet-api),否则 multipart-config 会被忽略。
完成上述配置后,@RequestParam("File") MultipartFile file 将正常注入,500 错误彻底消失。

















