Spring MVC @PathVariable注解
@PathVariable 将 URL 路径变量绑定到方法参数,常用于 RESTful API 设计。
基本用法
Java
@GetMapping("/user/{id}")
public String getUser(@PathVariable Long id) {
return "user/detail";
}
// URL: /user/123 → id = 123
注解属性
| 属性 | 类型 | 说明 |
|---|---|---|
| value/name | String | 路径变量名 |
| required | boolean | 是否必填,默认 true |
指定变量名
Java
@GetMapping("/user/{userId}")
public String getUser(@PathVariable("userId") Long id) {
return "user/detail";
}
多个路径变量
Java
@GetMapping("/user/{userId}/order/{orderId}")
public String getOrder(
@PathVariable Long userId,
@PathVariable Long orderId) {
return "order/detail";
}
// URL: /user/1/order/100 → userId=1, orderId=100
可选路径变量
Java
@GetMapping({"/user", "/user/{id}"})
public String user(@PathVariable(required = false) Long id) {
if (id == null) {
return "user/list";
}
return "user/detail";
}
正则表达式约束
Java
@GetMapping("/user/{id:\\d+}")
public String getUser(@PathVariable Long id) {
// 只匹配数字
return "user/detail";
}
@GetMapping("/user/{name:[a-zA-Z]+}")
public String getByName(@PathVariable String name) {
// 只匹配字母
return "user/detail";
}
Map 类型接收
Java
@GetMapping("/user/{id}/order/{orderId}")
public String getOrder(@PathVariable Map<String, String> vars) {
// vars = {id: "1", orderId: "100"}
return "order/detail";
}
RESTful 风格示例
Java
@RestController
@RequestMapping("/api/users")
public class UserApiController {
@GetMapping
public List<User> list() {
return userService.findAll();
}
@GetMapping("/{id}")
public User get(@PathVariable Long id) {
return userService.findById(id);
}
@PostMapping
public User create(@RequestBody User user) {
return userService.save(user);
}
@PutMapping("/{id}")
public User update(@PathVariable Long id, @RequestBody User user) {
user.setId(id);
return userService.save(user);
}
@DeleteMapping("/{id}")
public void delete(@PathVariable Long id) {
userService.delete(id);
}
}
与 @RequestParam 对比
| 注解 | 数据来源 | URL 示例 |
|---|---|---|
| @PathVariable | URL 路径 | /user/123 |
| @RequestParam | 查询参数 | /user?id=123 |
路径变量不能为空,required=false 只是允许可选路径,需配合多路径映射。
要点总结
- @PathVariable 绑定 URL 路径变量
- 支持正则表达式约束格式
- required=false 配合多路径实现可选
- 是 RESTful API 设计的核心注解
📝 发现内容有误?点击此处直接编辑