解决springboot升级3.X后form-data类型请求无法传参的问题

解决springboot升级3.X后form-data类型请求无法传参的问题

代码搬运工
2025-01-08 / 0 评论 / 3 阅读 / 正在检测是否收录...
解决这个问题前先普及一下Spring Boot是如何解析form-data的,Spring Boot通过MultipartResolver接口来解析multipart/form-data类型请求,该接口有两个实现类CommonsMultipartResolver和StandardServletMultipartResolver,下面我们来分别看一下这两个实现类

1、CommonsMultipartResolver

CommonsMultipartResolver是基于Apache Commons FileUpload库实现的。它使用Jakarta Commons FileUpload来解析multipart/form-data请求。这个解析器可以在application.properties或application.yml文件中通过配置spring.servlet.multipart.resolver属性来启用。但是在springboot 3.x中,该实现类已被弃用。

2、StandardServletMultipartResolver

StandardServletMultipartResolver是Spring Boot默认的MultipartResolver实现。它依赖于Servlet 3.0规范提供的API来解析multipart/form-data请求。当没有显式配置其他MultipartResolver时,Spring Boot会自动使用这个解析器。

  刚才已经说明了,springboot3只支持StandardServletMultipartResolver,所以如果遇到form-data无法解析的情况,就是StandardServletMultipartResolver没有被加载,StandardServletMultipartResolver加载是由MultipartAutoConfiguration来实现的,贴上代码如下

1736341513585.jpg

  从代码中可以看到MultipartAutoConfiguration被加载的关键是 spring.servlet.multipart.enabled 这个配置项,经过排查发现,原因是springboot升级前项目使用的是CommonsMultipartResolver,所以将 spring.servlet.multipart.enabled 设为false了,将该配置项改为true问题解决!如果不是这个原因,那么你需要排查一下项目中是否自定义实现MultipartResolver接口。

0

评论 (0)

取消