1. 只用 params(不关心参数值,只关心参数是否存在)
@GetMapping(value = "/search", params = {"query"})
public String search() {
// 这个方法只匹配 /search?query=xxx,但不获取 query 的值
return "search-page";
}
如果访问 /search?query=hello,会进入这个方法。
如果访问 /search(无 query 参数),不会进入这个方法。
2. 只用 @RequestParam(不限制请求,但获取参数值)
@GetMapping("/user")
public String getUser(@RequestParam("id") String userId) {
return "User ID: " + userId;
}
访问 /user?id=123 → 正常返回 User ID: 123。
访问 /user(无 id 参数)→ 报错 400 Bad Request(因为 @RequestParam 默认 required=true)。
3. 结合使用(既限制请求,又获取参数值)
@GetMapping(value = "/activate", params = {"token"})
public String activate(@RequestParam("token") String token) {
return "Account activated with token: " + token;
}
只有 /activate?token=xxx 会匹配,并提取 token 的值。
/activate(无 token)不会进入这个方法。
适用场景
用 params 的情况:
你想让不同的方法处理相同路径但不同参数的请求(如 /api?action=save 和 /api?action=delete)。
你想确保某些参数必须存在,否则不进入方法(比在方法内检查更高效)。
用 @RequestParam 的情况:
你需要获取请求参数的值并在方法里使用。
你想设置参数是否必须(required=false)、默认值(defaultValue)等。
总结 params @RequestParam 控制请求匹配 获取参数值 在注解里使用 在方法参数上使用 类似过滤器 类似参数解析器 如果你只是想让某个方法处理特定参数的请求,用 params;如果你需要获取参数的值,用 @RequestParam。两者可以独立使用,也可以结合使用。