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

Spring Boot 2.x.x中Multipart同时传输文件与实体类的最优方案

Spring Boot 2.x.x 同时传输文件与实体类的最优实现

你当前代码的问题在于:Multipart请求是分部分结构,不能同时混用@RequestBody和@RequestPart。@RequestBody会尝试将整个请求体解析为JSON,但Multipart请求的结构是多段式的,导致实体类无法正确绑定,所以字段全为null。

最优实现方式如下:

1. 修改Controller方法参数注解

将实体类参数的@RequestBody替换为@RequestPart,同时指定接口接收multipart/form-data类型的请求:

import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestPart;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest;

@PostMapping(value = "/your-api-path", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public ResponseEntity validateAndCreate(
        @RequestPart("requestBody") ValidationCreationDTO requestBody,
        @RequestPart("file") MultipartFile file,
        HttpServletRequest request) {
    // 此时requestBody的字段已正确赋值,可正常处理业务逻辑
    return ResponseEntity.ok("处理完成");
}

2. 构造符合要求的请求

发送请求时必须遵循multipart/form-data的格式规范:

  • 请求的Content-Type设置为multipart/form-data
  • 包含两个请求分段:
    • 名称为requestBody的分段,Content-Type设为application/json,内容为实体类的JSON字符串
    • 名称为file的分段,类型为文件,上传目标文件

前端Axios请求示例:

const formData = new FormData();
// 构造JSON类型的实体类分段
formData.append('requestBody', new Blob([JSON.stringify({
  // 填入实体类字段,例如:
  name: "测试校验",
  code: "VALID_001"
})], { type: 'application/json' }));
// 添加文件
formData.append('file', document.getElementById('fileInput').files[0]);

// 发送请求
axios.post('/your-api-path', formData, {
  headers: {
    'Content-Type': 'multipart/form-data'
  }
});

3. 必要配置与注意事项

  • 确保ValidationCreationDTO类有完整的getter/setter方法,或使用Lombok的@Data注解简化代码
  • 如果需要调整文件大小限制,在application.yml中配置:
spring:
  servlet:
    multipart:
      max-file-size: 10MB  # 单个文件最大大小
      max-request-size: 10MB  # 整个请求最大大小

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 17:12:09