日常踩坑_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)

跳坑结束,祝你快乐!

posted @   Dean_001  阅读(4968)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· DeepSeek在M芯片Mac上本地化部署
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能
点击右上角即可分享
微信分享提示