@pathvariable用于从restful url路径中提取占位符变量,如/users/{id}中的id;支持单/多个变量绑定、自动类型转换、正则约束匹配及简化写法(参数名一致时可省略value属性)。

Spring MVC 中,@RequestParam 用于获取 URL 查询参数(query string)或表单提交的键值对,@PathVariable 用于从 RESTful 风格的 URL 路径中提取变量。两者用途不同,不能混用,选错会导致 400 或 404 错误。
什么时候用 @RequestParam
适用于 GET 请求的查询参数(如 /user?name=Tom&age=25),或 POST 表单数据(application/x-www-form-urlencoded)。参数名默认与方法形参名一致,可显式指定 name 属性。
- 必需参数加
required = true(默认),不传会报 400 错误 - 可设默认值:
@RequestParam(value = "page", defaultValue = "1") int page - 支持集合类型,如
@RequestParam List<string> ids</string>可接收多个同名参数(?ids=1&ids=2&ids=3) - 注意:不能直接绑定复杂对象,需配合
@ModelAttribute
什么时候用 @PathVariable
适用于 RESTful 路径中的占位符,比如 /users/123、/orders/{orderId}/items。路径变量必须在 @RequestMapping 或其派生注解(如 @GetMapping)的 value 中定义。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 路径变量名默认与形参名一致,也可用
value指定:@PathVariable("id") Long userId - 支持类型转换(String、int、long、boolean 等),失败抛
MethodArgumentTypeMismatchException - 多个路径变量可同时使用:
@GetMapping("/users/{userId}/posts/{postId}") - 路径变量不能为空,否则匹配失败导致 404
常见错误和注意事项
容易混淆的点往往出在 URL 设计和注解搭配上:
-
@PathVariable只认路径里的花括号部分,?key=value不起作用 -
@RequestParam无法读取路径段,比如/api/user/123中的123必须用@PathVariable - 如果路径含正则约束(如
{id:\d+}),不满足时直接 404,不会进控制器方法 - 两者可共存:
@GetMapping("/users/{id}") public String get(@PathVariable Long id, @RequestParam String type)对应/users/5?type=admin
简单对比示例
假设请求 URL 是 /api/orders/1001?status=pending&limit=10:
-
@PathVariable("id") Long orderId→ 获取1001 -
@RequestParam String status→ 获取"pending" -
@RequestParam(defaultValue = "20") int limit→ 获取10,没传则为20
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










