Spring MVC多文件上传后端报错
出现问题场景
前端 input type=file
选择多个文件,form表单post提交到后端Controller接口,多个文件使用参数MultipartFile[] files
接收,当 input type=file
没有选择文件时,提交form表单,后端报错。
出现问题后端代码
public void save(Vo vo, @Requestparam(value="files", required=false) MultipartFile[] files) {
// TODO ...
}
解决办法
将controller中的方法参数 MulTipartFile[]
改成 List<MultipartFile>
,即可
public void save(Vo vo, @Requestparam(value="files", required=false) List<MultipartFile> files) {
// TODO ...
}
错误信息
Caused by: java.lang.IllegalStateException: Cannot convert value of type [java.lang.String] to required type [org.springframework.web.multipart.MultipartFile]: no matching editors or conversion strategy found
at org.springframework.beans.TypeConverterDelegate.convertIfNecessary(TypeConverterDelegate.java:241)
at org.springframework.beans.TypeConverterDelegate.convertIfNecessary(TypeConverterDelegate.java:110)
at org.springframework.beans.TypeConverterDelegate.convertToTypedArray(TypeConverterDelegate.java:469)
at org.springframework.beans.TypeConverterDelegate.convertIfNecessary(TypeConverterDelegate.java:175)
at org.springframework.beans.TypeConverterDelegate.convertIfNecessary(TypeConverterDelegate.java:92)
at org.springframework.beans.SimpleTypeConverter.convertIfNecessary(SimpleTypeConverter.java:49)
... 100 more
关联问题
开发中接口文件参数不使用 @Requestparam
注解标注接收的文件参数可正常使用,但是打包部署之后确不能正常使用(后端报错)。所以需要在参数上使用@RequestParam
。
// 错误代码
public void save(Vo vo, MultipartFile file) {
// TODO ...
}
// 可执行代码
public void save(Vo vo, @Requestparam(value="file", required=false) MultipartFile file) {
// TODO ...
}