Spring MVC @RequestParam注解
@RequestParam 将 HTTP 请求参数绑定到控制器方法参数。
基本用法
Java
@GetMapping("/user")
public String getUser(@RequestParam("id") Long userId) {
return "user/detail";
}
// 参数名相同时可省略 value
@GetMapping("/search")
public String search(@RequestParam String keyword) {
return "search/result";
}
注解属性
| 属性 | 类型 | 说明 |
|---|---|---|
| value/name | String | 参数名 |
| required | boolean | 是否必填,默认 true |
| defaultValue | String | 默认值 |
必填参数
Java
// 必填,缺少参数会抛出 MissingServletRequestParameterException
@GetMapping("/detail")
public String detail(@RequestParam Long id) {
return "detail";
}
// 可选
@GetMapping("/list")
public String list(@RequestParam(required = false) Integer page) {
return "list";
}
默认值
Java
@GetMapping("/list")
public String list(
@RequestParam(defaultValue = "1") Integer page,
@RequestParam(defaultValue = "10") Integer size) {
return "list";
}
多值参数
Java
@GetMapping("/search")
public String search(@RequestParam List<String> keywords) {
// URL: /search?keywords=java&keywords=spring
return "search";
}
@GetMapping("/filter")
public String filter(@RequestParam("ids") Set<Long> ids) {
// URL: /filter?ids=1&ids=2&ids=3
return "filter";
}
Map 类型
Java
@GetMapping("/query")
public String query(@RequestParam Map<String, String> params) {
params.forEach((k, v) -> System.out.println(k + "=" + v));
return "query";
}
类型转换
Spring 自动将字符串参数转换为目标类型:
Java
@GetMapping("/date")
public String byDate(@RequestParam @DateTimeFormat("yyyy-MM-dd") Date date) {
return "date";
}
@GetMapping("/status")
public String byStatus(@RequestParam Status status) { // 枚举自动转换
return "status";
}
与 @PathVariable 对比
| 注解 | 数据来源 | 示例 |
|---|---|---|
| @RequestParam | 查询参数 | /user?id=1 |
| @PathVariable | 路径变量 | /user/1 |
Java
@GetMapping("/user/{id}")
public String getById(@PathVariable Long id) {
return "user/detail";
}
@GetMapping("/user")
public String getByParam(@RequestParam Long id) {
return "user/detail";
}
required=true 时缺少参数会抛异常,建议设置 defaultValue 或 required=false。
要点总结
- @RequestParam 绑定查询参数到方法参数
- required 属性控制是否必填
- defaultValue 设置默认值避免空指针
- 支持集合、Map 类型接收多值参数
📝 发现内容有误?点击此处直接编辑