一、概要
SpringMVC Controller接收请求参数的方式有很多种,有的适合get请求,有的适合post 请求,有的两者都适合。
- 通过实体bean接收请求参数
- 通过处理方法的形参接收请求参数
- 通过HttpServletRequest接收请求参数
- 通过@PathVariable接收URL的请求参数
- 通过@RequestParam接收请求参数
- 通过@ModelAttribute接收请求参数
1.1、通过Bean接收请求参数
实体Bean接收请求参数适用于get和post请求方式,Bean的属性名称必须和请求参数名称相同。
@Controller
@RequestMapping("/user")
public class TestController {
@RequestMapping("/login")
public String login(User user, Model model){
if("JSONLiu".equals(user.getName())&&"123456".equals(user.getPwd())){
model.addAttribute("message","登录成功");
return "main";
} else{
model.addAttribute("message","用户名或者密码错误");
return "login";
}
}
}
1.2、通过处理方法的形参接收请求参数
通过处理方法的形参接收请求参数就是直接将表单参数直接写到控制器相应方法的形参,要求形参与请求参数名称相同,该接收请求参数方式适用于get和post请求方式。
@RequestMapping("/login2")
public String login2(String name,String pwd, Model model){
if("JSONLiu".equals(name)&&"123456".equals(pwd)){
model.addAttribute("message","登录成功");
return "main";
} else{
model.addAttribute("message","用户名或者密码错误");
return "login";
}
}
1.3、通过HttpServletRequest接收请求参数
通过HttpServletRequest接收请求参数适用于get和post请求方式。
@RequestMapping("/login3")
public String login3(HttpServletRequest request, Model model){
String name=request.getParameter("name");
String pwd=request.getParameter("pwd");
if("JSONLiu".equals(name)&&"123456".equals(pwd)){
model.addAttribute("message","登录成功");
return "main";
} else{
model.addAttribute("message","用户名或者密码错误");
return "login";
}
}
1.4、通过@PathVariable接收URL参数
@RequestMapping("/login/{name}/{pwd}")
public String login(@PathVariable String name,@PathVariable String pwd, Model model){
if("JSONLiu".equals(name)&&"123456".equals(pwd)){
model.addAttribute("message","登录成功");
return "main";
} else{
model.addAttribute("message","用户名或者密码错误");
return "login";
}
}
1.5、通过@RequestParam接收请求参数
@RequestParam有三个属性:
- value:参数名
- required:是否必须,默认为true.表示参数中必须包含该参数,否则将抛出错误
- default:参数默认值
@RequestParam适用于get和post请求方式
@RequestMapping("/login4")
public String login4(@RequestParam String name, @RequestParam String pwd, Model model){
if("JSONLiu".equals(name)&&"123456".equals(pwd)){
model.addAttribute("message","登录成功");
return "main";
} else{
model.addAttribute("message","用户名或者密码错误");
return "login";
}
}
该方式与“通过处理方法的形参接收请求参数”部分的区别如下:当请求参数与接收参数名不一致时,“通过处理方法的形参接收请求参数”不会报 404 错误,而“通过 @RequestParam 接收请求参数”会报 404 错误。
1.6、通过@ModelAttribute接收请求参数
@ModelAttribute用于将多个请求参数封装到一个实体对象中,简化数据绑定流程,而且自动暴露为模型数据,在视图页面展示时使用。
通过"实体类型Bean接收请求参数"只能将多个请求参数封装为一个实体对象,并不能暴露为模型数据(需要使用model.addAttribute()才能暴露为模型数据)
@ModelAttribute适用于get和post请求
@RequestMapping("/login5")
public String login5(@ModelAttribute("user")User user, Model model){
if("JSONLiu".equals(user.getName())&&"123456".equals(user.getPwd())){
model.addAttribute("message","登录成功");
return "main";
} else{
model.addAttribute("message","用户名或者密码错误");
return "login";
}
}