@PathVariable 是 Spring MVC/Spring Boot 中用于接收 RESTful 风格 URL 中的动态参数的核心注解。下面通过示例逐步讲解其原理、用法和常见细节。
1. 基本用法:绑定 URL 模板变量到方法参数
示例:
@RestController
@RequestMapping("/users")
public class UserController {
@GetMapping("/{id}") // URL模板:/users/123
public String getUser(@PathVariable Long id) {
return "User ID: " + id;
}
}
- URL请求:
GET /users/123 - 输出:
User ID: 123 - 关键点:
{id}是 URL 模板变量,@PathVariable将其值绑定到方法参数id。
2. 指定变量名(当模板名与参数名不一致时)
如果 URL 模板变量名与方法参数名不同,需手动指定:
@GetMapping("/{userId}")
public String getUser(@PathVariable("userId") Long id) { // 显式指定URL变量名
return "User ID: " + id;
}
3. 绑定多个变量
@GetMapping("/{country}/{city}")
public String getLocation(@PathVariable String country, @PathVariable String city) {
return country + ", " + city;
}
- URL请求:
GET /china/beijing - 输出:
china, beijing
4. 绑定到对象(高级用法)
Spring 支持将多个路径变量绑定到一个对象的属性:
@Data // Lombok注解,生成getter/setter
public class Address {
private String country;
private String city;
}
@GetMapping("/{country}/{city}")
public String getAddress(Address address) { // 无@PathVariable注解
return address.getCountry() + ", " + address.getCity();
}
- 原理:Spring 会自动将
country和city的值注入到Address对象的同名属性中。
5. 正则表达式限制 URL 格式
通过正则表达式限制路径变量的格式:
@GetMapping("/{id:\\d+}") // 仅匹配数字ID
public String getNumericUser(@PathVariable Long id) {
return "Numeric ID: " + id;
}
- 匹配:
/123(成功),/abc(404错误)
6. 与 @RequestParam 的区别
| 特性 | @PathVariable | @RequestParam |
|---|---|---|
| 用途 | 获取 URL 路径中的参数 | 获取 URL 查询参数(如?key=value) |
| URL示例 | /users/123 | /users?id=123 |
| 代码示例 | @PathVariable Long id | @RequestParam Long id |
7. 常见错误与调试
- 404错误:URL模板不匹配(如缺少路径变量或正则不匹配)。
- 500错误:类型转换失败(如字符串
"abc"绑定到Long)。 - 调试技巧:启用 Spring 日志(
logging.level.org.springframework.web=DEBUG)查看请求映射详情。
总结
- 核心作用:将 RESTful URL 的动态部分映射到方法参数。
- 灵活性:支持多变量、正则校验、对象绑定。
- 最佳实践:保持 URL 变量名与方法参数名一致,减少冗余配置。
通过合理使用 @PathVariable,可以构建清晰、直观的 RESTful API!

1万+

被折叠的 条评论
为什么被折叠?



