今天在spring 4.1.7 中尝试 multipart/form-data 的方式上传文本和文件混合数据,服务器老报错,说请求中并没有提供XXX字段(服务端配置的@RequestPart绑定)。
调试客户端multipart格式,甚至用 html页面,通过浏览器提交都不行。后来将 @RequestPart 换成 @RequestParam 就好了。之后查阅官方示例,也是用的后者。
https://spring.io/guides/gs/uploading-files/
后来发现字符串数据可以接收到,但文件上传,又解析不出来,猜测可能是 multipart resolver 出了问题,一路调试,发现 servlet request中是有上传的文件信息的。检查 application.properties 文件,发现已经启用了multipart:
multipart.enabled=true
multipart.max-file-size=10MB
于是删除java 配置中的
@Bean
public CommonsMultipartResolver getMultipartResolver() {
CommonsMultipartResolver resolver = new CommonsMultipartResolver();
resolver.setMaxUploadSize( 1024 * 1024 * 5 );
resolver.setMaxInMemorySize( 1024 * 1024 );
resolver.setDefaultEncoding( “UTF-8” );
return resolver;
}
然后就奇迹般的好了。猜测是spring 自己会初始化并装配 CommonsMultipartResolver,自己装配反而丢失了一些配置,具体还需研究。