日常踩坑_SpringBoot项目Controller层同时传输MultipartFile和实体类
背景提要
需求是一个表单,需要同时上传附件和一些其他内容(例如标题、内容之类的),本身是把MultipartFile
作为一个数组直接放入创建的对象FileSaveDTO
中的,但Controller层用@RequestBody
的时候,发现没有办法传入文件
遂改为两个参数RequestParam("files") MultipartFile[] files, @RequestParam("data") FileSaveDTO fileShareDto
,发现还是无济于事
后听从网上建议,取消掉FileSaveDTO前的 @RequestParam
注释,程序可以启动,使用postman测试的时候发现,FileSaveDTO仍然获取不到参数,全都是null
先说结论
需要使用@RequestPart
注解,像这样:@RequestPart("files") MultipartFile[] files, @RequestPart("data") FileSaveDTO fileShareDto
而是要Postman测试时,参数传递方式如下:
注意,data需要显式指定content-type为application/json
原因
由于MultipartFile
的content-type的类型为:multipart/form-data,而FileSaveDTO
的content-type的类型为:application/json
而multipart/form-data的媒体类型高于application/json,所以application/json被覆盖了,使用@RequestBody
或@RequestParam
注解都没用
@RequestPart这个注解是用在multipart/form-data表单提交请求的方法上
当请求为multipart/form-data时,@RequestParam只能接收String类型的name-value值,@RequestPart可以接收复杂的请求域(像json、xml)
跳坑结束,祝你快乐!