@PathVariable用于从URL路径提取变量值,支持单个/多个变量绑定、可选参数与默认值、编码及特殊字符处理。

在 Spring Boot 中,@PathVariable 用于从 URL 路径中提取变量值,是 RESTful 风格接口开发中最常用的注解之一。
基本用法:绑定单个路径变量
当 URL 中包含动态段(如 /users/123),可用 @PathVariable 捕获该段的值:
- 方法参数上添加
@PathVariable("id"),括号内为路径中占位符的名称 - 路径映射使用
{id}占位符,与注解中的名称保持一致 - 若参数名与占位符名相同,可省略注解中的字符串,如
@PathVariable Long id
示例:
@GetMapping("/users/{id}")
public String getUser(@PathVariable("id") Long userId) {
return "User ID: " + userId;
}
多个路径变量:按需声明并匹配
URL 中可包含多个动态段,如 /orders/1001/items/205,此时需对应多个 @PathVariable:
- 每个变量需有独立的占位符和注解,名称必须与路径中一致
- 顺序无关,Spring 依据名称而非位置进行绑定
- 支持不同数据类型,Spring 会自动转换(如 String、Long、UUID)
示例:
@GetMapping("/orders/{orderId}/items/{itemId}")
public String getItem(
@PathVariable Long orderId,
@PathVariable Long itemId) {
return "Order " + orderId + ", Item " + itemId;
}
可选路径变量与默认值
路径变量默认是必需的,但可通过 required = false 设为可选;配合 @DefaultValue 可指定默认值:
-
@PathVariable(required = false)允许该段缺失(但需调整路径设计,如使用查询参数更合适) - 更常见做法是用
@DefaultValue提供默认值,避免空值处理 - 注意:
@DefaultValue必须搭配@PathVariable使用,且类型需兼容
示例:
@GetMapping("/products/{category}/{page}")
public String listProducts(
@PathVariable String category,
@PathVariable @DefaultValue("1") Integer page) {
return "Category: " + category + ", Page: " + page;
}
路径变量编码与特殊字符处理
URL 中的斜杠(/)、点(.)等字符可能影响路径解析:
- 默认情况下,Spring 将
/视为路径分隔符,不能直接作为变量值的一部分 - 若需接收含斜杠的变量(如
/files/path/to/file),应使用**通配符,并配合@MatrixVariable或改为查询参数 - 对于含点号的变量(如
/api/v1.2/users),建议将版本号单独设为路径段或使用正则限定格式 - 路径变量中的中文或特殊字符会被自动 URL 解码,无需手动处理


















