SpringMVC-05-不同类型的参数传递
1、@RequestParam 注解
注解在 Controller 方法形参之前,用于绑定请求参数与形参,类似于 MyBatis 中的 @Param 注解
@RequestMapping("/paramDemo")
@ResponseBody
public String paramDemo(@RequestParam("name") String username, Integer age) {
System.out.println("普通参数传递 username = " + username);
System.out.println("普通参数传递 age = " + age);
return "{'username'='" + username + "','age'=" + age + "}";
}
上面的控制器方法形参名为 username,但绑定了名为 name 的请求参数,所有发送请求时应该以 name 为请求参数名,而不能用 username
[补充]
- 注解了 @RequestParam 之后,参数变成了必传参数,若请求中不包含此参数会报错
- @RequestParam 中有 required 属性,表示参数是否必需,默认为 true,设置为 false 则可以不传入此请求参数
- @RequestParam 中还有 defaultValue 属性,表示未传入此参数时的默认值,设置后也可以不传入此请求参数
2、POJO 类型参数
请求参数名与形参对象属性名相同,定义 POJO 类型形参即可接收
@RequestMapping("/pojoParam")
@ResponseBody
public String pojoParam(User user) {
System.out.println("pojo 参数传递 User = " + user);
return user.toString();
}
上面的示例中 User 类中有 username 和 age 属性,则请求中只需要传入这两个属性值即可,名称要保持一致,例如 localhost/pojoParam?username=Alice&age=18
[注意]
- POJO 类需要无参构造器和 setter 方法
2、嵌套 POJO 参数
和 POJO 传递方法相同,只需要把类中的各个属性传入即可,类内嵌套的类中的属性用 属性名.属性名 来传递
比如下面两个类的嵌套(省略成员方法)
public class User {
private String username;
private Integer age;
private Address address;
}
public class Address {
private String province;
private String city;
}
要传入 User 类则需要 传入 username、age、address.province、address.city 四个属性(注意 address 是属性名而不是类名)
4、数组参数
@RequestMapping("/arrayParam")
@ResponseBody
public String arrayParam(String[] array) {
System.out.println("数组参数传递 array = " + Arrays.toString(array));
return Arrays.toString(array);
}
传入请求参数时,同一个参数名多次传入值即可,例如 localhost/arrayParam?array=q&array=w&array=e&array=r 得到 array = [q, w, e, r]
5、集合保存普通参数
与数组参数类似,但需要注解 @RequestParam 绑定参数关系,传入请求参数的方式与传入数组相同
@RequestMapping("/listParam")
@ResponseBody
public String arrayParam(@RequestParam List<String> list) {
System.out.println("列表参数传递 list = " + list);
return list.toString();
}