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

Spring REST接口同时接收@RequestBody与MultipartFile的实现及调用问题

Spring是否支持该实现及Postman调用方案

一、原代码实现不被Spring支持

原代码同时使用@RequestBody和@RequestParam(MultipartFile)的写法存在格式冲突:

  • @RequestBody要求请求的Content-Type为application/json,用于解析JSON请求体
  • 文件上传需要请求的Content-Type为multipart/form-data
    一个HTTP请求只能设置一种Content-Type,因此Spring无法同时解析两种格式,这就是你遇到Current request is not a multipart request错误的核心原因。

二、正确的实现方案

推荐使用@RequestPart处理multipart请求中的不同部分,可同时接收JSON数据和文件:

@PostMapping(path = "/v1/cust-advice", produces = "application/json", consumes = "multipart/form-data")
public ResponseEntity<ResponseMessage> uploadFile(
        @RequestPart("custData") CustomerData custData,
        @RequestPart("file") MultipartFile file) {
    // 业务逻辑处理
}

@RequestPart能识别multipart请求中不同类型的分片:custData对应JSON格式的对象分片,file对应文件分片,Spring会自动完成解析与类型转换。

三、Postman调用步骤

  1. 请求方法选择POST,填入接口URL
  2. 切换到Body标签,选中form-data选项
  3. 添加第一个参数:
    • Key填写custData
    • 类型选择Text
    • Value中输入JSON格式的CustomerData数据,示例:
      {
          "name": "张三",
          "phone": "13800138000"
      }
      
  4. 添加第二个参数:
    • Key填写file
    • 类型选择File
    • 点击右侧Select Files按钮,选择本地待上传文件
  5. 点击Send发送请求

其他可选方案

若不想使用@RequestPart,可将CustomerData序列化为JSON字符串作为普通参数传递:

@PostMapping(path = "/v1/cust-advice", produces = "application/json", consumes = "multipart/form-data")
public ResponseEntity<ResponseMessage> uploadFile(
        @RequestParam("custData") String custDataJson,
        @RequestParam("file") MultipartFile file) {
    // 手动将JSON字符串转为CustomerData对象
    ObjectMapper mapper = new ObjectMapper();
    CustomerData custData = mapper.readValue(custDataJson, CustomerData.class);
    // 业务逻辑处理
}

这种方式在Postman调用时,custData参数的Value直接填入JSON字符串即可。

内容的提问来源于stack exchange,提问作者Avishek

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 05:45:39