在引入 Spring MVC 后,我们不再需要配置繁琐的 XML 映射文件,而是通过注解将前端发起的 HTTP 请求(如 GET /user/1)直接绑定到后端某个 Java 方法上。这种“声明式路由”极大提升了开发效率。
那么,这些注解到底有哪些?各自怎么用?本文带你一文搞懂。
一、核心注解:@RequestMapping
✅ 作用
将 HTTP 请求路径 映射到 Controller 中的方法。
📌 基本用法
@Controller public class StaffController { @RequestMapping("/staff/add") public String addStaff() { // 处理新增员工逻辑 return "success"; } @RequestMapping("/staff/delete") public String deleteStaff() { // 处理删除逻辑 return "success"; } }
- 前端访问
http://localhost:8080/staff/add→ 自动调用addStaff()方法; - 路径必须前后端一致,否则 404。
🔧 高级用法(可选)
- 指定请求方法:
@RequestMapping(value = "/staff", method = RequestMethod.POST)
- 支持路径变量:
@RequestMapping("/staff/{id}") public String getStaff(@PathVariable Long id) { ... }
💡
@RequestMapping是“万能注解”,但写起来略显冗长。
二、快捷注解:语义化 HTTP 方法
Spring 提供了更简洁、语义更清晰的组合注解,它们本质上都是 @RequestMapping 的封装:
| 注解 | 等价写法 | 适用场景 |
@GetMapping("/user") |
@RequestMapping(method = GET) |
查询数据 |
@PostMapping("/user") |
@RequestMapping(method = POST) |
新增数据 |
@PutMapping("/user") |
@RequestMapping(method = PUT) |
更新数据 |
@DeleteMapping("/user") |
@RequestMapping(method = DELETE) |
删除数据 |
✅ 推荐写法(更清晰)
@RestController @RequestMapping("/staff") public class StaffController { @PostMapping("/add") // 新增 public Result add(@RequestBody Staff staff) { ... } @PutMapping("/{id}") // 修改 public Result update(@PathVariable Long id, @RequestBody Staff staff) { ... } @DeleteMapping("/{id}") // 删除 public Result delete(@PathVariable Long id) { ... } @GetMapping("/{id}") // 查询 public Result getById(@PathVariable Long id) { ... } }
✅ 优势:
- 代码自解释(看到
@PostMapping就知道是新增);- 减少样板代码;
- 符合 RESTful 设计规范。
三、其他常用配套注解
| 注解 | 作用 | 示例 |
@PathVariable |
获取 URL 路径中的变量 | /user/{id} → @PathVariable("id") Long id |
@RequestParam |
获取 URL 查询参数或表单参数 | ?name=张三 → @RequestParam("name") String name |
@RequestBody |
接收 JSON 请求体并自动反序列化为对象 | 前端传 { "name": "张三" } → @RequestBody User user |
@ResponseBody |
将返回值直接写入 HTTP 响应体(常用于返回 JSON) | 配合 @RestController 自动生效 |
@RestController |
= @Controller + @ResponseBody |
所有方法默认返回 JSON,无需加 @ResponseBody |
四、小结:如何选择?
- 如果你只做简单映射,用
@RequestMapping足够; - 但强烈推荐使用
@GetMapping/@PostMapping等语义化注解,代码更清晰、团队协作更高效; - 路径设计建议遵循 RESTful 风格:
GET /users→ 查询列表POST /users→ 新增用户GET /users/1→ 查询 ID=1 的用户PUT /users/1→ 更新 ID=1 的用户DELETE /users/1→ 删除 ID=1 的用户
附:原理简述(可选了解)
Spring MVC 启动时,会扫描所有被 @Controller 标记的类,解析其中的 @RequestMapping 及其派生注解,构建一个 “请求路径 → 方法” 的映射表(HandlerMapping)。
当请求到来时,DispatcherServlet 根据 URL 和 HTTP 方法查找匹配的方法并执行。
这就是为什么路径必须精确匹配,且注解要写在 Spring 管理的 Bean 上。
掌握这些注解,你就已经掌握了 Spring MVC 的“路由密码”。接下来,只需专注业务逻辑,让请求自动找到它的归宿!