SpringMVC的参数类型【参数绑定】

切记:不论采用哪种参数类型,要想实现自动绑定,只要我们依据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;

	}

 


附项目地址:

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值