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

如何使用curl向Spring REST端点提交CSV文件及file参数为空问题排查

问题根因
  • MultipartFile 仅支持接收 multipart/form-data 类型的表单请求体,你的接口配置的 consumes = "text/csv",且 curl 发送的是纯 CSV 二进制流,不是表单格式,类型完全不匹配。
  • 你给 MultipartFile 参数添加了 @RequestBody 注解,Spring 的 @RequestBody 用于将请求体绑定到普通 POJO、字符串、字节数组等类型,无法直接绑定到 MultipartFile 对象,自然解析结果为 null。
修复方案

两种方案二选一即可,不需要同时修改:

方案1:保持当前curl直接传CSV流的调用方式,仅修改控制器代码

如果不需要用到 MultipartFile 封装的文件名、文件后缀校验等API,直接接收CSV内容即可,无需修改curl命令:

  1. 修改接口定义,替换参数类型和注解:
@PostMapping(produces = "text/csv", consumes = "text/csv")
// 可根据需求选择接收为字节数组或字符串
public ResponseEntity create(@RequestBody byte[] csvContent);
// 字符串写法:public ResponseEntity create(@RequestBody String csvContent);
  1. 实现类对应调整参数类型,拿到内容后直接按CSV逻辑处理即可。

方案2:保持用MultipartFile接收,同步修改接口配置和curl命令

如果确实需要使用MultipartFile的相关封装方法,走标准表单文件上传逻辑:

  1. 修改接口定义,调整consumes类型和参数注解:
import org.springframework.http.MediaType;

@PostMapping(produces = "text/csv", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public ResponseEntity create(@RequestParam("file") MultipartFile file);

注意:实现类的参数注解不需要重复写,保持接口定义即可
2. 修改curl命令,使用表单参数上传文件:

curl -X POST "http://localhost:8791/api/public/v1/inboxes/csv" -H "accept: */*" -F "file=@/c/Users/Schilling/Desktop/Test.csv"

-F 参数会自动设置请求头为 multipart/form-data,不需要手动指定Content-Type,参数名 file 要和 @RequestParam 中声明的名称完全一致。
3. 异常排查:若调整后仍接收不到文件,检查项目配置中 spring.servlet.multipart.enabled 是否为 true,Spring Boot 默认开启该配置,无需额外设置。

内容的提问来源于stack exchange,提问作者L. Schilling

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 12:06:00