@PathVariable
和 @RequestParam
是 Spring 框架中用于处理 HTTP 请求中的参数的注解,它们之间有一些关键的区别。
位置不同:
@PathVariable
用于从 URI 模板中提取变量,通常用于提取 URL 中的路径参数。
例如:
// http:localhost:6553/api/name=admin/password=123456
@GetMapping("/api/name={name}/password={password}")
public String test1(@PathVariable("name") String name, @PathVariable("password") String password) {
return "name --->" + name + " password----->" + password;
}
// 结果:name --->admin password----->123456
// http:localhost:6553/api/=admin
@GetMapping("/api/{userName}")
public String test4(@PathVariable("userName") String userName) {
return "userName: " + userName;
}
//结果 userName: admin
在这个Demo中 name、 userName 、 password 参数路径中提取
@RequestParam
用于从请求参数中提取值,通常用于处理查询参数或表单提交。
例如:
// http://192.168.10.71:9000/api?name=admin&password=234
@GetMapping("/api")
public String test2(@RequestParam("name") String name, @RequestParam("password") String password) {
return "name --->" + name + " password----->" + password;
}
// 结果 name --->admin password----->234
// http:localhost:6553/api?userName=admin
@GetMapping("/api")
public String test3(@RequestParam("userName") String userName) {
return "userName: " + userName;
}
//结果 userName: admin
在这个例子中,userName 参数从请求的查询参数中提取。
用途不同:
-
@PathVariable
通常用于 RESTful 风格的请求,其中路径中的一部分被当作参数。例如,/users/{id}
可以用于获取特定用户的信息。 -
@RequestParam
用于处理请求中的查询参数或表单提交的参数。它可以用于处理 URL 查询参数,也可以用于处理 POST 请求中的表单数据。
默认值处理不同
-
@PathVariable
可以指定一个默认值,例如@PathVariable(name = "id", defaultValue = "1")
。 -
@RequestParam
也可以指定一个默认值,例如@RequestParam(name = "param", defaultValue = "default")
。
是否必须
-
@PathVariable
默认情况下是必须的,如果路径中没有对应的值,将导致 404 错误。 -
@RequestParam
默认是非必须的,如果没有提供参数,参数值将为null
,但你可以使用required
属性设置为true
来使其变为必须的。
总的来说,选择使用 @PathVariable
还是 @RequestParam
取决于你的需求和具体的场景。如果你需要从 URI 中提取参数,通常使用 @PathVariable
更合适;如果你处理查询参数或表单提交,那么 @RequestParam
更为适用。