@RequestParam
注解
@RequestParam
是 Spring MVC 中用于绑定请求参数到方法参数的注解。它可以将 URL 中的查询参数或表单参数映射到控制器方法的参数中,并支持多种配置选项,如设置默认值和是否为必填参数。
主要功能
- 绑定请求参数:将 URL 中的查询参数或表单参数绑定到控制器方法的参数。
- 参数验证:指定参数是否为必填项以及默认值,确保请求中提供了必要的数据。
- 类型转换:自动将请求参数的字符串类型转换为方法参数的目标类型。
使用示例
基本用法
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class MyController {
@GetMapping("/greeting")
public String greeting(@RequestParam(name = "name", required = false, defaultValue = "World") String name) {
return "Hello, " + name;
}
}
在这个例子中:
@GetMapping("/greeting")
表示这个方法处理/greeting
路径的 GET 请求。@RequestParam(name = "name", required = false, defaultValue = "World")
将请求参数name
绑定到方法参数name
上。name = "name"
指定请求参数的名称。required = false
表示该参数不是必需的,如果未提供则不报错。defaultValue = "World"
指定了默认值,当请求中没有提供该参数时使用默认值 “World”。
处理多个参数
@GetMapping("/add")
public int add(@RequestParam("a") int a, @RequestParam("b") int b) {
return a + b;
}
在这个例子中:
@RequestParam("a")
和@RequestParam("b")
将请求参数a
和b
的值绑定到方法参数a
和b
上,并自动转换为整数类型。
处理列表参数
@RequestParam
也可以处理列表参数:
@GetMapping("/numbers")
public String getNumbers(@RequestParam List<Integer> numbers) {
return "Numbers are: " + numbers;
}
请求 URL 如:/numbers?numbers=1&numbers=2&numbers=3
会将参数绑定到 List<Integer> numbers
中。
配置选项
- name/value: 请求参数的名称。
value
是name
的别名,两个属性是等效的。 - required: 指定该参数是否为必填项。默认为
true
,表示必须在请求中提供。如果设置为false
,可以不提供该参数。 - defaultValue: 当请求中没有提供该参数时使用的默认值。即使
required = true
,只要设置了defaultValue
,该参数也不再是必填的。
常见错误处理
- 如果
required = true
且请求中没有提供该参数,Spring 会抛出MissingServletRequestParameterException
。 - 如果提供的参数无法转换为目标类型(例如,字符串不能转换为数字),会抛出
TypeMismatchException
。
总结
@RequestParam
是 Spring MVC 中常用的注解,用于将 HTTP 请求的参数绑定到控制器方法的参数中。它支持默认值和必填检查等功能,使得处理请求参数更加方便和安全。在开发 RESTful API 或处理表单提交时,@RequestParam
提供了灵活的参数绑定方式,简化了请求处理逻辑。