Spring Boot:multipart/form-data POST正常但PATCH请求抛MultipartException求助
问题分析与解决方案
问题根源
Spring的CommonsMultipartResolver默认仅允许POST、PUT请求处理multipart/form-data类型的请求,PATCH方法不在默认允许的请求方法列表中,这就是同一份请求数据用POST正常、用PATCH就抛出MultipartException的核心原因。
解决方案
方案1:修改CommonsMultipartResolver配置,允许PATCH方法
在你定义multipartResolver Bean的代码中,显式添加允许PATCH方法:
public class Main { public static void main(String[] args) { SpringApplication.run(Main.class, args); } @Bean(name = "multipartResolver") public CommonsMultipartResolver multipartResolver() { CommonsMultipartResolver resolver = new CommonsMultipartResolver(); // 添加PATCH到允许的请求方法列表 resolver.setAllowedMethods("POST", "PUT", "PATCH"); return resolver; } }
方案2:改用Spring Boot默认的StandardServletMultipartResolver(推荐)
Spring Boot默认使用StandardServletMultipartResolver,适配性更好,只需两步配置:
- 在
application.properties或application.yml中开启延迟解析(避免提前解析multipart数据导致的方法校验失败):
spring.servlet.multipart.resolve-lazily=true
- 移除自定义的
CommonsMultipartResolverBean,让Spring Boot自动配置生效。
额外注意事项
- 你的curl命令中手动指定了
Content-Type: multipart/form-data,但curl会自动生成包含正确boundary的Content-Type头,手动指定反而可能引发解析错误,建议删除该header参数。 - 检查项目依赖:你同时引入了
spring-boot-starter-data-mongodb和spring-boot-starter-data-mongodb-reactive,若无需响应式MongoDB支持,建议移除其中一个,避免潜在的依赖冲突。
内容的提问来源于stack exchange,提问作者Valay
相关产品推荐
相关产品推荐

