@PathVariable

@PathVariable 是 Spring MVC 中的一个注解,用于将 URL 路径中的变量绑定到处理方法的参数上。它允许从 URL 路径中提取动态部分并传递给控制器的方法参数,通常用于 RESTful 风格的 API。

基本用法

假设我们有这样一个 URL:/users/{id},其中 {id} 表示一个路径变量。在 Spring 中,我们可以使用 @PathVariable 注解来获取这个 id 的值并将其传递给控制器方法。

例子:

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 注解中的参数名:

@GetMapping("/users/{id}")

public String getUserById(@PathVariable Long id) {

    return "User ID: " + id;

}

在这种情况下,Spring 会自动将路径中的 {id} 匹配到方法参数 id

使用多个 @PathVariable

有时候我们可能需要从 URL 中获取多个路径变量。例如:

@GetMapping("/users/{userId}/orders/{orderId}")

public String getUserOrderById(@PathVariable Long userId, @PathVariable Long orderId) {

    return "User ID: " + userId + ", Order ID: " + orderId;

}

在这个例子中,我们使用了两个 @PathVariable,分别提取 userIdorderId

@PathVariable 的属性

  1. value 属性:用于指定路径变量的名称,通常省略,直接使用参数名称来匹配。
  2. required 属性:默认为 true,表示该路径变量是必须的。如果设置为 false,表示路径中可以没有该变量。
@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。

项目分区导航后端配置和调试 ⬅️ | 01-@PathVariable | ➡️ lombok注解