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

如何在Spring Boot中正确接收携带base64文件的JSON格式POST请求

问题原因

你当前的请求和后端接收逻辑存在类型不匹配问题:

  • 你发送的是Content-Type: application/json请求,请求体中的file字段是图片的Base64编码字符串
  • Spring中MultipartFile类型仅支持接收multipart/form-data类型请求中的二进制文件参数,Jackson序列化框架无法直接将JSON中的字符串自动转换为MultipartFile对象,因此file字段会被赋值为null,而结构匹配的annex对象可以正常被解析。

两种可行修复方案

方案1:保留当前Base64传参逻辑,仅修改后端DTO

将你用来接收@RequestBody的DTO类中,file字段的类型从MultipartFile改为String,拿到Base64字符串后手动解码为字节流即可后续处理:

// 1. 修改DTO字段定义
private String file; // 原定义为MultipartFile,修改为String

// 2. 业务逻辑中解码Base64
import java.util.Base64;
// ......
byte[] fileBytes = Base64.getDecoder().decode(yourDto.getFile());
// 后续可将字节数组写入本地存储、上传OSS等

方案2:改用标准表单文件上传,性能更优

该方案避免了Base64编码带来的33%额外体积开销,是文件上传的通用实现:

  1. 调整后端接口定义,拆分接收业务对象和文件参数:
@PostMapping("/api/reports/annex/save/{reportId}")
public Result saveAnnex(@PathVariable Long reportId,
                       @RequestPart Annex annex,
                       @RequestPart MultipartFile file) {
    // 业务处理逻辑
}
  1. 调整IntelliJ HTTP客户端的请求格式为multipart/form-data:
POST http://localhost:7000/api/reports/annex/save/307
Content-Type: multipart/form-data; boundary=request-boundary

--request-boundary
Content-Disposition: form-data; name="annex"
Content-Type: application/json

{
  "id": "",
  "reportId": "307",
  "title": "TEST FILE",
  "description": "TEST DESCRIPTION",
  "creationDate": "",
  "document_path": ""
}
--request-boundary
Content-Disposition: form-data; name="file"; filename="test.jpg"
Content-Type: image/jpeg

< 替换为你本地图片的绝对路径,例如 /home/user/test.jpg 或 C:\Users\xxx\test.jpg
--request-boundary--

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 10:12:00