日常踩坑_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)
跳坑结束,祝你快乐!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· DeepSeek在M芯片Mac上本地化部署
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能