@PathVariable/@RequestParam
现在还需要写这篇文章实属惭愧,基础不牢一直是我学习途中的痛点,每次用这两个注解都要去查一次,这次一次性解决了吧
在Spring Boot中,@PathVariable
和@RequestParam
是处理HTTP请求参数的两种常用注解:
@PathVariable
-
作用 从URL路径模板中提取变量值,通常用于RESTful风格的URL设计,标识资源的唯一性(如ID或名称)。
-
代码示例
//URL示例 /users/{userId} @GetMapping("/users/{userId}") public User getUser(@PathVariable String userId) { // 通过userId查询用户 }
-
特点
- 变量是URL路径的一部分,不可省略(否则路径不匹配)。
- 适用于必填且直接关联资源的参数(如ID)。
- 支持多级路径变量(如
/a/{b}/c/{d}
)。
@RequestParam
-
作用 从URL查询字符串中获取参数值,通常用于过滤、分页等非资源标识的场景。
-
代码示例
//URL示例: /api/users?role=admin&page=2 @GetMapping("/users") public List<User> getUsers( @RequestParam(required = false, defaultValue = "user") String role, @RequestParam(defaultValue = "1") int page ) { // 根据role和page过滤用户 }
-
特点
- 参数附加在URL的查询字符串中(
?key=value
)。 - 适用于可选或条件性参数(如排序、分页、过滤)。
- 支持多参数组合(如
?name=John&age=25
)。
- 参数附加在URL的查询字符串中(
主要区别
参数来源 | URL路径中的模板变量(如/{id} ) |
URL查询字符串(如?key=value ) |
是否必填 | 默认必填(路径必须匹配) | 默认非必填(可通过required=true 设为必填) |
适用场景 | 标识资源(如ID、唯一名称) | 过滤、分页、排序等附加条件 |
URL结构 | 路径的一部分(如/users/1 ) |
查询参数(如/users?role=admin ) |
总结
@PathVariable
:用于资源标识(URL路径中的变量),参数必填。@RequestParam
:用于附加条件(查询字符串中的参数),参数可选或带默认值。
根据API设计的RESTful原则,优先用@PathVariable
标识资源,用@RequestParam
处理辅助条件。
此外,@RequestBody注解用于接收Post请求的参数体
在使用这三个注解的过程中尽量遵守规范:
- Get使用@PathVariable/@RequestParam路径传参
- Post用@RequestBody + DTO传参