[特殊字符] Spring MVC 四大参数注解笔记


一、@RequestParam(查询参数 / 表单参数)

✔ 作用

👉 从 URL参数 或 form-data 中取值,绑定到方法参数


✔ 适用场景

1️⃣ URL Query

复制代码
GET /user/list?page=1&size=10

@RequestParam int page
@RequestParam int size

2️⃣ 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 token

2️⃣ 自定义 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 → 请求头