@RequestParam修饰控制器方法参数,用于获取请求参数
实例:
@RequestMapping("/login")
public String login(@RequestParam ("name") String n,@RequestParam("age") Integer a, Model model)
{
if (userService.addUser2(n,a)>0)
{
model.addAllAttributes(Map.of("tip","添加用户成功!"));
System.out.println("姓名:" + n + " 年龄:" + a);
return "success";
}
model.addAllAttributes(Map.of("tip","添加用户失败!"));
return "error";
}
当然SpirngMVC很少用着个注解,因为SpringMVC可以同名映射,也就是方法参数与请求参数同名就可以相互映射。例如:
@RequestMapping("/login")
public String login(String name,Integer age, Model model)
{
if (userService.addUser2(name,age)>0)
{
model.addAllAttributes(Map.of("tip","添加用户成功!"));
System.out.println("姓名:" + name + " 年龄:" + age);
return "success";
}
model.addAllAttributes(Map.of("tip","添加用户失败!"));
return "error";
}
不仅如此,当方法的形参为复合对象时,复合对象的属性也会与请求参数发生同名映射,例如:
@RequestMapping("/login")
public String login(User user, Model model)
{
if (userService.adduser(user)>0)
{
model.addAllAttributes(Map.of("tip","添加用户成功!"));
return "success";
}
model.addAllAttributes(Map.of("tip","添加用户失败!"));
return "error";
}
public class User
{
private String name;
private Integer age;
//省略getter、setter方法
}
除了可以用复合对象来封装请求参数,也可以用MultiValueMap,该对象是一个特殊的Map,只要用@RequestParam修饰它,它就包含了所有请求参数,然后就可以通过它的getFirst方法获取请求参数,例如:
public String login(@RequestParam MultiValueMap<String,Object> params, Model model)
{
String n = (String)params.getFirst("name");
Integer a = (Integer)params.getFirst("age");
if (userService.addUser2(n,a)>0)
{
model.addAllAttributes(Map.of("tip","添加用户成功!"));
System.out.println("姓名:" + n + " 年龄:" + a);
return "success";
}
model.addAllAttributes(Map.of("tip","添加用户失败!"));
return "error";
}