1. 介绍
这两个注解都是spring注解。
@RequestParam通常用于获取请求参数,这些参数可以是URL中的查询参数,也可以是表单数据中的字段。而@RequestPart则是用于处理多部分(multipart)请求中的部分,特别是当上传文件或处理复杂类型(比如JSON)的时候。
2. @RequestParam
主要用于获取 简单类型 的请求参数(如 String, int, boolean)。
参数来源:
URL查询参数(如 ?name=John)。
表单字段(application/x-www-form-urlencoded 或 multipart/form-data)。
@PostMapping("/upload")
public String uploadFile(
@RequestParam("fileName") String fileName, // 从表单字段获取文件名
@RequestParam("file") MultipartFile file // 从表单字段获取文件(需谨慎使用)
) {
// 处理逻辑
}
特点:
简单类型绑定:自动将参数转换为声明的类型(如 String → Integer)。
默认必填:若请求中缺少参数会抛出异常,可通过 required = false 关闭。
文件上传的局限性:虽然可以绑定 MultipartFile,但无法处理复杂内容类型(如嵌套JSON)。
3. @RequestPart
专门处理 多部分请求(multipart/form-data) 中的 复杂内容。
适用于:
上传文件(如 MultipartFile)。
接收JSON或其他结构化数据(需结合 @RequestBody 或转换器)。
在swagger 参数中可以显示:
@PostMapping("/upload")
public String uploadFile(
@RequestPart("metadata") UserMetadata metadata, // 绑定JSON数据到对象
@RequestPart("file") MultipartFile file // 绑定文件
) {
// 处理逻辑
}
特点
内容协商:根据 Content-Type 头自动选择转换器(如JSON → 对象)。
支持复杂类型:可以绑定对象、嵌套结构或二进制文件。
更严格的验证:对多部分请求的每个部分单独处理。
4.核心区别总结
特性 @RequestParam @RequestPart
数据来源 URL参数或表单字段 多部分请求(multipart)的某一部分
主要用途 简单类型参数(如文本、数字) 复杂类型(如文件、JSON对象)
内容类型处理 忽略 Content-Type 根据 Content-Type 使用转换器
文件上传 支持,但需手动处理类型 直接支持,更灵活
数据绑定 自动类型转换(如String → Integer)依赖转换器(如JSON → 对象)
5. 选择建议
使用 @RequestParam:
当接收 简单表单字段(如文本、数字)或URL查询参数时。
使用 @RequestPart:
当需要处理以下情况:
上传文件(MultipartFile)。
接收JSON或其他结构化数据(结合 @RequestBody)。
需要根据 Content-Type 动态解析请求体。