Spring MVC(或 Spring Boot)中,处理 HTTP 请求(如 POST、GET、DELETE、PUT 等)时,可以使用不同的注解来绑定请求中的数据到控制器方法的参数上。
java
@RestController
@RequestMapping("/api/users")
public class UserController {
// GET /api/users
@GetMapping
public List<User> getAllUsers() {
// 返回所有用户
}
// GET /api/users/123
@GetMapping("/{id}")
public User getUserById(@PathVariable Long id) {
// 根据 ID 查询
}
// POST /api/users
@PostMapping
public User createUser(@RequestBody User user) {
// 保存新用户,返回带 ID 的对象
}
// PUT /api/users/123
@PutMapping("/{id}")
public User updateUser(@PathVariable Long id, @RequestBody User user) {
// 全量更新用户
}
// PATCH /api/users/123
@PatchMapping("/{id}")
public User patchUser(@PathVariable Long id, @RequestBody Map<String, Object> updates) {
// 部分更新(如只改 email)
}
// DELETE /api/users/123
@DeleteMapping("/{id}")
public ResponseEntity<Void> deleteUser(@PathVariable Long id) {
// 删除用户
return ResponseEntity.noContent().build(); // 204
}
// GET /api/users?username=alice
@GetMapping(params = {"username"}) // 可选:限定必须带 username
public List<User> searchByUsername(@RequestParam String username) {
// 按用户名模糊查询
}
}
方法参数不写注解默认是@RequestParam
| 特性 / 注解 | @PathVariable |
@RequestParam |
@RequestBody |
|---|---|---|---|
| 适用位置 | 方法参数 | 方法参数 | 方法参数 |
| 适用 HTTP 方法 | 所有(只要 URL 含路径变量) | GET、POST、PUT、DELETE(任何带 query 或 form-data 的请求) | POST、PUT、PATCH(通常不用于 GET/DELETE) |
| 数据来源 | URL 路径片段(如 /users/{id}) |
URL 查询参数(?key=value)或表单字段(application/x-www-form-urlencoded、multipart/form-data) |
HTTP 请求体(raw body),如 JSON、XML |
支持基本类型 (如 String, Long, int) |
✅ | ✅ | ✅(但极少使用,易出错) |
| 支持实体类(POJO) | ❌ | ✅(无需加注解,Spring 自动绑定) | ✅(必须加注解,用于反序列化 JSON 等) |
支持 Map<String, String> |
❌ | ✅(自动收集所有 query/form 参数) | ✅(常用于接收结构未知的 JSON 对象,建议用 Map<String, Object> 更灵活) |
| 多参数支持 | 每个路径变量需单独声明一个参数 | ✅ 可多个 @RequestParam,或用 POJO / Map 一次性接收 |
❌ 一个方法仅允许一个 @RequestBody |
| 是否可省略注解 | ❌ 必须显式标注 | ⚠️ 基本类型可省略(默认视为 @RequestParam),但不推荐;POJO 不能加此注解 |
❌ 必须显式标注,否则无法识别请求体 |
| 典型使用场景 | RESTful 资源 ID:/users/123 |
搜索条件、分页、表单提交:?page=1&size=10 |
创建/更新资源:发送 JSON 对象 { "name": "Alice" } |