springboot 使用multipartFile上传文件,报错java.lang.IllegalArgumentException: Expected MultipartHttpServletRequest: is a MultipartResolver configured?

问题重现:

springboot项目本地运行正常,上传文件正常;打war包后,部署weblogic后不能正常访问,上传选择文件后点击确认页面提示“Expected MultipartHttpServletRequest: is a MultipartResolver configured?” 后台报错

问题分析:

因为找不到multipartReslover的原因,在springMVC配置文件配置它的时候,不能用其他名字,只能用指定名字,否则就出现这种找不到的错误

springboot项目是有自动配置的自动配置类为:MultipartAutoConfiguration

@Bean(
name = {"multipartResolver"}
)
@ConditionalOnMissingBean({MultipartResolver.class})
public StandardServletMultipartResolver multipartResolver() {
return new StandardServletMultipartResolver();
}

代码可以看出配置的multipartResoler并没有问题,问题在由默认配置使用的是StandardServletMultipartResolver,而项目需要部署到11G的weblogic上,servlet的版本是2.5,是只能使用commons-fileupload。maven配置如下,这样就有问题了,部署到weblogic上后使用的就不再是StandardServletMultipartResolver,而是CommonsMultipartResolver



commons-fileupload
commons-fileupload
1.3.3


commons-io
commons-io
2.4

解决方法:

定义一个multipartResoler的Bean替换自动配置中的Bean

代码如下:

@Bean
public CommonsMultipartResolver multipartResolver() {
CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver();
multipartResolver.setDefaultEncoding("UTF-8");
multipartResolver.setMaxUploadSize(104857600);
return multipartResolver;
}

注意配置此Bean必须在有注解@Configuration的类中,我这里直接将此Bean配置到启动类XxxxxxApplication中.

posted @ 2019-07-30 11:40  胡天晴  阅读(876)  评论(0)    收藏  举报