前言
基本的Java知识推荐阅读:
1. 基本知识
@RequestPart
注解主要用于在 Spring Boot 中接收 HTTP 请求中的"部分"数据,通常在处理多部分请求(如文件上传)时使用
与 @RequestBody
不同,@RequestPart
适用于 multipart/form-data 类型的请求,而 @RequestBody
通常用于 application/json 类型的请求
- 适用场景:用于处理多部分请求,如文件上传或表单数据混合 JSON
- 注解目标:可以用在方法参数上,帮助 Spring MVC 自动绑定 multipart 表单数据到方法参数
- 常见用途:文件上传、混合文本和文件的数据处理
- 依赖配置:需确保配置了 MultipartResolver,一般情况下 Spring Boot 默认配置了 StandardServletMultipartResolver,无需额外设置
@RequestPart 与 @RequestBody 的具体差异
特性 | @RequestPart | @RequestBody |
---|---|---|
请求类型 | 主要用于 multipart/form-data | 主要用于 application/json |
适用数据类型 | 文件、JSON、表单数据等 | 适用于 JSON 数据 |
绑定方式 | 可绑定到文件、基本数据类型和 POJO | 绑定到 JSON 对象并直接映射成 POJO |
用途 文件 | 上传和多部分数据 | 常规的 JSON 数据绑定 |
常用场景 | 文件和元数据混合处理 | JSON 请求体的数据 |
多参数支持 | 适合处理多种类型参数混合 | 通常用于单一的 JSON 对象 |
Postman 支持 | 需要选择 form-data,每部分对应 key 名 | 直接以 raw 格式发送 JSON 数据 |
-
使用 @RequestPart:
选择 form-data 作为请求体类型
每一个字段(包括文件)都作为独立的“键值对”发送,文件部分需将类型设置为 File
支持文件与文本混合的数据提交 -
使用 @RequestBody:
选择 raw 格式的请求体类型,并选择 JSON
直接发送 JSON 格式的数据
2. Demo
基本的示例Demo如下:
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.http.ResponseEntity;
@RestController
@RequestMapping("/upload")
public class FileUploadController {
// 上传接口,接收文件和JSON数据
@PostMapping("/file")
public ResponseEntity<String> handleFileUpload(
@RequestPart("file") MultipartFile file, // 接收文件
@RequestPart("metadata") UploadMetadata metadata // 接收JSON数据
) {
// 处理文件和元数据
String fileName = file.getOriginalFilename();
String description = metadata.getDescription();
// 文件处理逻辑
// JSON 数据处理逻辑
return ResponseEntity.ok("文件上传成功,文件名:" + fileName + ",描述:" + description);
}
// 数据类,用于接收JSON数据
public static class UploadMetadata {
private String description;
// Getters and Setters
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
}
}