切记:不论采用哪种参数类型,要想实现自动绑定,只要我们依据SpringMVC的要求去前后台规范开发即可!
第一种:简单类型例如-String
- 伪代码:
/*第一种方法:方法形参类型为简单类型例如-String
*在适配器执行Handler方法的时候,会通过一个中间件-
*参数绑定适配器进行参数类型的适配,然后实现request
*请求域信息和形参信息的自动绑定!当适配简单类型,必须
*按照此类型的参数绑定适配器的编写规则才能实现:即满足
*Controller方法形参名和request请求域中传递的参
*数名一致!这样才能绑定成功!
*/
@RequestMapping(value = "/login4",method = {RequestMethod.GET})
public String getLogin4(String username,String password,Model model){
model.addAttribute("username", username);
model.addAttribute("password", password);
return "login";
}
/*当我们不想保持方法的形参名和传递参数名一致的时候,
*SpringMVC提供了一种注解来满足我们-@RequestParam
*value:指定request传入参数的参数名和形参进行绑定
*required:指定参数是否必须传入
*defaultValue:指定传递参数的默认值
*/
@RequestMapping(value = "/login5",method = {RequestMethod.GET})
public ModelAndView getLogin5(@RequestParam(value = "username",required = true,defaultValue = "lisi")String user_name,String password){
ModelAndView modelAndView = new ModelAndView();
modelAndView.addObject("username", user_name);
modelAndView.addObject("password", password);
modelAndView.setViewName("login");
return modelAndView;
}
*第二种:POJO
- 伪代码:
/*第二种方法:方法形参类型为-POJO
*和简单类型形参绑定类似,只需要保持POJO形参中的属性名和
*request域中传递的参数名一致即可实现自动绑定
*传递的参数名有两种情况:
*(1)url中传参的key
*(2)表单传参input标签的name
*/
@RequestMapping(value = "/login6",method = {RequestMethod.GET,RequestMethod.POST})
public ModelAndView getLogin6(User user){
ModelAndView modelAndView = new ModelAndView();
modelAndView.addObject("u", user);
modelAndView.setViewName("login");
return modelAndView;
}
*第三种: 包装类型
- 伪代码:
/*第三种方法:方法形参类型为-包装类型
*和POJO形参绑定类似,只不过多了一层
*POJO封装,本质也是传递参数名和POjO
*属性名要保持一致
*例如url:/user/login7.mvc?user.username=cyn&user.password=123
*JSP显示:${itemUser.user.username}
*/
@RequestMapping(value = "/login7",method = {RequestMethod.GET,RequestMethod.POST})
public ModelAndView getLogin7(ItemUser itemUser){
ModelAndView modelAndView = new ModelAndView();
modelAndView.addObject("itemUser", itemUser);
//如果不传参,那么下面语句就会报空指针异常
System.out.println("生日:"+itemUser.getUser().getBirthday());
modelAndView.setViewName("login");
return modelAndView;
}
第四种:数组类型
- 伪代码:
/*第四种方法:方法形参类型为-数组类型
*和上面情况大同小异,也要保证传递参数
*名字和形参名相一致,只不过特殊之处在
*于传递相同名字的参数可以有多个且会自
*动绑定至形参数组中而已!
*应用场景-批量删除
*JSP界面-复选框
*例如url:/user/login8.mvc?userId=1&userId=2
*/
@RequestMapping(value = "/login8",method = {RequestMethod.GET,RequestMethod.POST})
public ModelAndView getLogin8(Integer[] userId){
ModelAndView modelAndView = new ModelAndView();
modelAndView.addObject("userId", userId);
System.out.println("用户id1:"+userId[0]);
System.out.println("用户id2:"+userId[1]);
modelAndView.setViewName("login");
return modelAndView;
}
第五种:List
- 伪代码:
/*第五种方法:方法形参类型为-List
*和上面情况大同小异,也要保证传递参数
*名字和形参名相一致,只不过真正的List
*是作为了包装类的一个属性!
*应用场景-批量修改
*例如url:/user/login9.mvc?userList[0].username=cyn&userList[1].username=lisi
*JSP显示:${itemUser.userList[0].username}
*/
@RequestMapping(value = "/login9",method = {RequestMethod.GET,RequestMethod.POST})
public ModelAndView getLogin9(ItemUser itemUser){
ModelAndView modelAndView = new ModelAndView();
modelAndView.addObject("itemUser", itemUser);
//如果不传参或者参数少于2,那么下面语句就会报空指针异常
System.out.println("用户名1:"+itemUser.getUserList().get(0).getUsername());
System.out.println("用户名2:"+itemUser.getUserList().get(1).getUsername());
modelAndView.setViewName("login");
return modelAndView;
}
第六种:Map
- 伪代码:
/*第六种方法:方法形参类型为-Map
*和上面情况大同小异,也要保证传递参数
*名字和形参名相一致,只不过真正的Map
*是作为了包装类的一个属性!
*例如url:/user/login10.mvc?userMap['username']=lisi
*JSP显示:${itemUser.userMap['username']}
*/
@RequestMapping(value = "/login10",method = {RequestMethod.GET,RequestMethod.POST})
public ModelAndView getLogin10(ItemUser itemUser){
ModelAndView modelAndView = new ModelAndView();
modelAndView.addObject("itemUser", itemUser);
System.out.println("用户名1:"+itemUser.getUserMap().get("username"));
modelAndView.setViewName("login");
return modelAndView;
}
附项目地址: