You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot多实体(文件+JSON)上传API报错:Required part 'entities'不存在

问题分析与解决方案

问题根源

出现MissingServletRequestPartException错误的核心原因有两点:

  1. 请求表单字段名与模型类属性不匹配:模型类EntityWithFileAndJson中对应JSON数据的属性是jsonData,但你的请求里用的是json,Spring无法完成属性映射。
  2. 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 12:37:32