1. 参数位置不同
注解 | 参数位置 | 示例 URL |
---|
@RequestParam | URL 查询字符串 (?之后) | /users?name=John&age=25 |
@PathVariable | URL 路径部分 ({}占位符) | /users/{id}/orders/{orderId} |
🎯 2. 核心用途不同
注解 | 主要用途 | 典型场景 |
---|
@RequestParam | 获取可选或必选的查询参数 | 过滤、排序、分页等查询条件 |
@PathVariable | 获取RESTful 资源标识符 | 资源ID、唯一标识等路径变量 |
⚙️ 3. 功能特性对比
特性 | @RequestParam | @PathVariable |
---|
是否必需 | 可通过 required=false 设为可选 | 默认必需(路径必须包含) |
默认值 | 支持 defaultValue | 不支持默认值 |
多值支持 | 支持数组/集合 (如 List<String>) | 不支持多值(单个路径变量) |
参数名称灵活性 | 可通过 value 指定参数名 | 必须与路径占位符名称匹配 |
RESTful 设计 | 非 RESTful 核心元素 | RESTful 资源定位的关键组成部分 |
🧩 4. 代码示例对比
@RequestParam 示例:
// 获取查询参数:/search?keyword=spring&page=2
@GetMapping("/search")
public Result search(
@RequestParam String keyword,
@RequestParam(defaultValue = "1") int page) {
// ...
}
@PathVariable 示例:
// 获取路径变量:/users/123/orders/456
@GetMapping("/users/{userId}/orders/{orderId}")
public Order getOrder(
@PathVariable Long userId,
@PathVariable String orderId) {
// ...
}
原则 | @RequestParam | @PathVariable |
---|
RESTful 规范 | 用于非资源属性 | 用于资源标识符 |
幂等性 | 不影响资源标识 | 直接标识资源 |
缓存友好度 | 查询参数不影响缓存键 | 路径变量是缓存键的一部分 |
SEO 友好度 | 对SEO不友好(动态参数) | 对SEO更友好(静态路径) |