[特殊字符] Spring MVC 四大参数注解笔记
一、@RequestParam(查询参数 / 表单参数)
✔ 作用
👉 从URL参数 或 form-data中取值,绑定到方法参数
✔ 适用场景
1️⃣ URL Query
GET /user/list?page=1&size=10@RequestParam int page @RequestParam int size2️⃣ form-data(文件上传 / 表单提交)
name=tom&age=18✔ 特点
- 用于“单个字段”
- 支持默认值
- 支持是否必填
@RequestParam(required = false, defaultValue = "0") int page✔ 本质
👉 从request.getParameter()取值
✔ 你代码里的例子
@RequestParam MultipartFile file @RequestParam String tableName👉 multipart/form-data 请求
二、@PathVariable(路径参数)
✔ 作用
👉 从 URL 路径中取值
✔ 示例
GET /user/1001@GetMapping("/user/{id}") public User get(@PathVariable Long id)✔ 特点
- URL 结构化参数
- REST 风格核心方式
✔ 多参数
/user/1001/order/5001@GetMapping("/user/{uid}/order/{oid}") public String test(@PathVariable Long uid, @PathVariable Long oid)✔ 本质
👉 从 URL path 中解析变量
三、@RequestBody(请求体 JSON)
✔ 作用
👉 把 HTTP Body 中的 JSON 转成 Java 对象
✔ 示例
前端发送
POST /user { "name": "tom", "age": 18 }后端接收
@PostMapping("/user") public void add(@RequestBody User user)✔ 特点
- 只能用于 POST / PUT / PATCH
- 解析 JSON
- 依赖 HttpMessageConverter(Jackson)
✔ 本质
👉 JSON → Java对象(反序列化)
✔ 和 @RequestParam 区别(重点)
| 类型 | 来源 | 数据格式 |
|---|---|---|
| @RequestParam | URL / form-data | key=value |
| @RequestBody | body | JSON |
四、@RequestHeader(请求头)
✔ 作用
👉 从 HTTP Header 中取值
✔ 示例
请求
GET /user token: abc123 user-id: 1001后端
@GetMapping("/user") public String test(@RequestHeader String token)✔ 常见用法
1️⃣ token 鉴权
@RequestHeader("Authorization") String token2️⃣ 自定义 header
@RequestHeader("user-id") Long userId✔ 本质
👉 从request.getHeader()取值
五、四者对比(核心总结表)
| 注解 | 数据来源 | 数据格式 | 使用场景 |
|---|---|---|---|
| @RequestParam | URL / form-data | key=value | 普通参数、分页、上传 |
| @PathVariable | URL路径 | /{id} | REST资源定位 |
| @RequestBody | 请求体body | JSON | 复杂对象提交 |
| @RequestHeader | 请求头 | header | token / 鉴权 / trace |
六、真实工程判断逻辑(非常重要)
看到一个接口,你要这样判断:
✔ 1. 有没有{}
/user/1001👉 一定是 @PathVariable
✔ 2. 有没有 JSON body
{ "name": "tom" }👉 一定是 @RequestBody
✔ 3. 有没有 ?xxx=xxx
?page=1👉 @RequestParam
✔ 4. 有没有 header
token: xxx👉 @RequestHeader
七、一句话总结
@RequestParam→ 参数@PathVariable→ 路径@RequestBody→ JSON@RequestHeader→ 请求头
