Controller GetMapping 进阶

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。两者可以独立使用,也可以结合使用。

全部评论

相关推荐

点赞 评论 收藏
分享
程序员小白条:找的太晚,别人都是大三实习,然后大四秋招春招的,你大四下了才去实习,晚1年
点赞 评论 收藏
分享
Yki_:你要算时间成本呀,研究生两三年,博士三四年,加起来就五六年了,如果你本科去腾讯干五年,多领五年的年薪,加上公司内涨薪,可能到时候十五年总薪资也跟博士差不多
点赞 评论 收藏
分享
07-02 10:44
门头沟学院 C++
码农索隆:太实诚了,告诉hr,你能实习至少6个月
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务