Spring Boot多实体(文件+JSON)上传API报错:Required part 'entities'不存在
问题分析与解决方案
问题根源
出现MissingServletRequestPartException错误的核心原因有两点:
- 请求表单字段名与模型类属性不匹配:模型类
EntityWithFileAndJson中对应JSON数据的属性是jsonData,但你的请求里用的是json,Spring无法完成属性映射。 - Spring解析Multipart表单列表参数时,要求字段名严格匹配列表项的属性路径,原请求的格式无法被正确识别。
修复步骤
1. 修正请求的表单字段名
将CURL请求中的entities[0].json和entities[1].json改为entities[0].jsonData和entities[1].jsonData,确保与模型类属性名一致。修改后的CURL如下:
curl --location 'localhost:8091/v1/upload-multiple' \ --header 'Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.' \ --form 'entities[0].file=@"/home/abcd/Downloads/dummy.pdf"' \ --form 'entities[0].jsonData="{\"id\":1, \"name\":\"apple\"}"' \ --form 'entities[1].file=@"/home/abcd/Downloads/sample.pdf"' \ --form 'entities[1].jsonData="{\"id\":2, \"name\":\"orange\"}"'
2. 验证模型类的属性访问能力
确保EntityWithFileAndJson类的@Data注解(Lombok)已生效,能自动生成getter/setter方法。如果Lombok未正常工作,手动添加getter/setter也可:
public class EntityWithFileAndJson { private MultipartFile file; private Fruit jsonData; public MultipartFile getFile() { return file; } public void setFile(MultipartFile file) { this.file = file; } public Fruit getJsonData() { return jsonData; } public void setJsonData(Fruit jsonData) { this.jsonData = jsonData; } }
3. 确认Multipart配置有效性
- Spring Boot项目:默认已自动配置
MultipartResolver,无需额外操作。 - 传统Spring MVC项目:需在配置类中注册
StandardServletMultipartResolver或CommonsMultipartResolver,确保能处理Multipart请求。
额外注意事项
- 发送请求时,务必确认Postman的请求类型为
multipart/form-data,避免选错格式导致解析失败。 - 自定义实体
Fruit需包含无参构造函数,且属性名与JSON中的键(如id、name)完全匹配,否则Spring无法解析JSON数据。
内容的提问来源于stack exchange,提问作者Masoom Raza
相关产品推荐
相关产品推荐

