PathVariable
是 Spring 框架中的一个注解,用于从 URL 路径里获取变量值。它常常在 RESTful 服务里发挥作用,能够让我们创建带有参数的动态 URL。
下面通过示例来详细说明其用法:
基础用法
当我们在 URL 路径中定义了变量,就可以借助 PathVariable
注解把这些变量值绑定到控制器方法的参数上。
基础用法
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 {
// 这里定义了一个路径变量 userId,它会匹配 URL 中 /users/ 后面的部分
@GetMapping("/users/{userId}")
public String getUser(@PathVariable String userId) {
// 方法接收到路径变量后,就可以根据这个 ID 去获取对应的用户信息
return "获取 ID 为 " + userId + " 的用户信息";
}
}
如果我们发送一个请求到 http://localhost:8080/users/123
,那么 userId
这个路径变量就会被赋值为 "123"
,接着在方法里就能够使用这个值来获取相关用户信息。
多个路径变量的情况
在同一个 URL 路径中,我们可以定义多个路径变量。
多个路径变量的情况
@GetMapping("/users/{userId}/orders/{orderId}")
public String getOrder(@PathVariable String userId, @PathVariable String orderId) {
return "获取用户 " + userId + " 的订单 " + orderId;
}
对于请求 http://localhost:8080/users/123/orders/456
,userId
会被赋值为 "123"
,orderId
会被赋值为 "456"
。
自定义路径变量名称
要是方法参数名和路径变量名不一样,我们可以通过 @PathVariable
的 value 属性来指定路径变量名。
自定义路径变量名称
@GetMapping("/products/{productId}")
public String getProduct(@PathVariable("productId") String id) {
return "获取产品 ID 为 " + id + " 的信息";
}
类型转换功能
PathVariable
能够自动把路径变量转换为方法参数所需的类型。
类型转换功能
@GetMapping("/accounts/{accountId}")
public String getAccount(@PathVariable Long accountId) {
// 这里路径变量会自动转换为 Long 类型
return "获取账户 ID 为 " + accountId + " 的信息";
}
正则表达式约束
我们可以使用正则表达式来限制路径变量的取值范围。
正则表达式约束
@GetMapping("/books/{isbn:\\d{13}}")
public String getBook(@PathVariable String isbn) {
return "获取 ISBN 为 " + isbn + " 的书籍";
}
上面这个例子中,isbn
路径变量必须是 13 位的数字。 关于isbn
注意事项
- 路径变量是 URL 的一部分,所以在客户端发送请求时必须提供。
- 要保证路径变量的顺序和控制器方法中参数的顺序一致。
- 路径变量的名称必须和 URL 模板中定义的名称相同,除非我们使用
@PathVariable
的 value 属性进行了重命名。PathVariable
是 Spring 框架中的一个注解,用于从 URL 路径里获取变量值。它常常在 RESTful 服务里发挥作用,能够让我们创建带有参数的动态 URL。
下面通过示例来详细说明其用法:
基础用法
当我们在 URL 路径中定义了变量,就可以借助 PathVariable
注解把这些变量值绑定到控制器方法的参数上。
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 {
// 这里定义了一个路径变量 userId,它会匹配 URL 中 /users/ 后面的部分
@GetMapping("/users/{userId}")
public String getUser(@PathVariable String userId) {
// 方法接收到路径变量后,就可以根据这个 ID 去获取对应的用户信息
return "获取 ID 为 " + userId + " 的用户信息";
}
}
如果我们发送一个请求到 http://localhost:8080/users/123
,那么 userId
这个路径变量就会被赋值为 "123"
,接着在方法里就能够使用这个值来获取相关用户信息。
多个路径变量的情况
在同一个 URL 路径中,我们可以定义多个路径变量。
java
@GetMapping("/users/{userId}/orders/{orderId}")
public String getOrder(@PathVariable String userId, @PathVariable String orderId) {
return "获取用户 " + userId + " 的订单 " + orderId;
}
对于请求 http://localhost:8080/users/123/orders/456
,userId
会被赋值为 "123"
,orderId
会被赋值为 "456"
。
自定义路径变量名称
要是方法参数名和路径变量名不一样,我们可以通过 @PathVariable
的 value 属性来指定路径变量名。
java
@GetMapping("/products/{productId}")
public String getProduct(@PathVariable("productId") String id) {
return "获取产品 ID 为 " + id + " 的信息";
}
类型转换功能
PathVariable
能够自动把路径变量转换为方法参数所需的类型。
java
@GetMapping("/accounts/{accountId}")
public String getAccount(@PathVariable Long accountId) {
// 这里路径变量会自动转换为 Long 类型
return "获取账户 ID 为 " + accountId + " 的信息";
}
正则表达式约束
我们可以使用正则表达式来限制路径变量的取值范围。
java
@GetMapping("/books/{isbn:\\d{13}}")
public String getBook(@PathVariable String isbn) {
return "获取 ISBN 为 " + isbn + " 的书籍";
}
上面这个例子中,isbn
路径变量必须是 13 位的数字。 关于isbn
注意事项
- 路径变量是 URL 的一部分,所以在客户端发送请求时必须提供。
- 要保证路径变量的顺序和控制器方法中参数的顺序一致。
- 路径变量的名称必须和 URL 模板中定义的名称相同,除非我们使用
@PathVariable
的 value 属性进行了重命名。
借助 PathVariable
,我们能够创建出简洁且有语义的 URL,这对于构建 RESTful API 而言非常实用。