在 Spring Boot 里,后端控制器方法(Controller)可以通过不同的注解来"接收前端传来的参数",这些注解分别对应不同的传参方式。
🌟 常见的参数接收注解对比
| 注解 | 来源 | 用法 | 示例 URL / 请求体 | 说明 |
|---|---|---|---|---|
@PathVariable |
路径变量 | 从 URL 路径中取参数 | /user/123 |
用于 RESTful 风格接口,例如 /wish/delete/13 |
@RequestParam |
查询参数(URL 上 ? 后面) |
从 URL 的查询字符串取参数 | /wish/delete?wishId=13 |
适合简单参数 |
@RequestBody |
JSON 请求体 | 从请求体中取参数 | {"wishId":13,"title":"test"} |
常用于 POST 请求 |
@RequestHeader |
请求头 | 从 HTTP header 中取值 | Authorization: Bearer xxx |
取请求头里的值 |
@CookieValue |
Cookie | 从 Cookie 里取值 | - | 比较少用 |
@ModelAttribute |
表单参数 | 绑定到一个对象上(传统 form 表单) | - | 适用于 application/x-www-form-urlencoded |
💡 举例讲解
✅ 1️⃣ @PathVariable
java
@DeleteMapping("/wish/delete/{wishId}")
public boolean deleteWish(@PathVariable Long wishId) {
return wishService.deleteWish(wishId);
}
👉 URL: DELETE /wish/delete/13
wishId = 13
✅ 2️⃣ @RequestParam
java
@PostMapping("/wish/delete")
public boolean deleteWish(@RequestParam Long wishId) {
return wishService.deleteWish(wishId);
}
👉 URL: POST /wish/delete?wishId=13
wishId = 13
✅ 3️⃣ @RequestBody
java
@PostMapping("/wish/delete")
public boolean deleteWish(@RequestBody Map<String, Object> data) {
Long wishId = (Long) data.get("wishId");
return wishService.deleteWish(wishId);
}
👉 请求体:
json
{
"wishId": 13
}
适用于前端使用 wx.request 发送 JSON 格式数据。
✅ 4️⃣ 组合对象绑定
你也可以直接接收一个对象:
java
@PostMapping("/wish/add")
public boolean addWish(@RequestBody Wish wish) {
return wishService.addWish(wish);
}
👉 请求体:
json
{
"title": "学习SpringBoot",
"description": "今天学@RequestParam"
}
🔍 小结
| 使用场景 | 推荐注解 |
|---|---|
REST 风格 URL /api/user/123 |
@PathVariable |
URL 查询参数 /api/user?id=123 |
@RequestParam |
JSON 请求体 { "id": 123 } |
@RequestBody |