--- title: "01-@PathVariable" created: 2025-12-02 tags: - 项目 aliases: - @PathVariable --- # @PathVariable `@PathVariable` 是 Spring MVC 中的一个注解,用于将 URL 路径中的变量绑定到处理方法的参数上。它允许从 URL 路径中提取动态部分并传递给控制器的方法参数,通常用于 RESTful 风格的 API。 ### 基本用法 假设我们有这样一个 URL:`/users/{id}`,其中 `{id}` 表示一个路径变量。在 Spring 中,我们可以使用 `@PathVariable` 注解来获取这个 `id` 的值并将其传递给控制器方法。 #### 例子: ```java import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RestController; @RestController public class UserController { @GetMapping("/users/{id}") public String getUserById(@PathVariable("id") Long id) { return "User ID: " + id; } } ``` ### 解释 - 在上面的例子中,`@GetMapping("/users/{id}")` 表示处理 `/users/{id}` 这种类型的请求。 - `{id}` 是路径中的一个占位符,它表示 URL 的一部分是一个变量,用户请求时,可以使用实际的值替换它,例如 `/users/123`。 - 在 `getUserById` 方法中,`@PathVariable("id")` 告诉 Spring 去捕获路径中的 `id` 部分,并将其作为参数传递给方法。 ### 省略参数名 在大多数情况下,如果路径变量的名称和方法参数的名称相同,可以省略 `@PathVariable` 注解中的参数名: ```java @GetMapping("/users/{id}") public String getUserById(@PathVariable Long id) { return "User ID: " + id; } ``` 在这种情况下,Spring 会自动将路径中的 `{id}` 匹配到方法参数 `id`。 ### 使用多个 `@PathVariable` 有时候我们可能需要从 URL 中获取多个路径变量。例如: ```java @GetMapping("/users/{userId}/orders/{orderId}") public String getUserOrderById(@PathVariable Long userId, @PathVariable Long orderId) { return "User ID: " + userId + ", Order ID: " + orderId; } ``` 在这个例子中,我们使用了两个 `@PathVariable`,分别提取 `userId` 和 `orderId`。 ### `@PathVariable` 的属性 1. `value` **属性**:用于指定路径变量的名称,通常省略,直接使用参数名称来匹配。 2. `required` **属性**:默认为 `true`,表示该路径变量是必须的。如果设置为 `false`,表示路径中可以没有该变量。 ```java @GetMapping("/users/{id}") public String getUserById(@PathVariable(value = "id", required = false) Long id) { return "User ID: " + (id != null ? id : "default"); } ``` ### 总结 - `@PathVariable` 用于将 URL 中的占位符部分绑定到方法参数。 - 可以通过 `@PathVariable("variableName")` 来明确指定名称。 - 如果路径变量名称和方法参数名称相同,可以省略参数名。 - 支持多个路径变量绑定,用于创建 RESTful API。 --- **项目分区导航**: [[00-后端配置和调试|后端配置和调试]] ⬅️ | 01-@PathVariable | ➡️ [[02-lombok注解|lombok注解]]