由于服务器迁移,jdk由原来的1.8升级到17,随着而来的springboot由原来的1.4.7.RELEASE升级到2.7.18,使用了spring security 。大部分功能没有什么问题,但上传文件报错,错误信息如下:java.lang.IllegalStateException: Unable to process parts as no multi-part configuration has been provided at org.apache.catalina.connector.Request.parseParts(Request.java:2766) ~[tomcat-embed-core-9.0.83.jar:9.0.83] at org.apache.catalina.connector.Request.getParts(Request.java:2735) ~[tomcat-embed-core-9.0.83.jar:9.0.83] at org.apache.catalina.connector.RequestFacade.getParts(RequestFacade.java:795) ~[tomcat-embed-core-9.0.83.jar:9.0.83] at javax.servlet.http.HttpServletRequestWrapper.getParts(HttpServletRequestWrapper.java:326) ~[tomcat-embed-core-9.0.83.jar:4.0.FR] at javax.servlet.http.HttpServletRequestWrapper.getParts(HttpServletRequestWrapper.java:326) ~
deepseek,百度了半天没有结果,然后就一点一点的删除文件,最后删除到一个
public class WebConfig implements WebMvcConfigurer 的文件后,问题解决了,里面 有这样一段内容
@Bean
public ServletRegistrationBean<DispatcherServlet> dispatcherServletRegistration() {
ServletRegistrationBean<DispatcherServlet> registration = new ServletRegistrationBean<>(new DispatcherServlet());
registration.setName("dispatcherServlet");
registration.setLoadOnStartup(1);
registration.addUrlMappings("/"); // 确保 URL 映射正确
return registration;
}
将这段内容注释掉就可以了,deepseek的解释是
当您在Spring Boot中 手动注册DispatcherServlet
(通过ServletRegistrationBean
),会导致 Spring Boot的默认自动配置失效,特别是与MultipartConfig
相关的配置。此时必须 显式关联MultipartConfigElement
,否则会出现no multi-part configuration
异常。
修复方案
方案一:移除手动注册(推荐)
除非有特殊需求,否则无需手动注册DispatcherServlet
。直接删除该@Bean
定义,Spring Boot会自动配置
方案二:显式绑定Multipart配置(如需保留手动注册)
如果必须手动注册(例如需要定制URL映射规则),需 主动注入MultipartConfigElement