Spring MVC数据绑定

1,什么是数据绑定?

在执行程序时,Spring MVC会根据客户端请求参数的不同,将请求消息中的信息以一定的方式转换并绑定到控制器类的方法参数中。这种将请求消息数据与后台方法参数建立连接的过程就是Spring MVC中的数据绑定。

2,Spring MVC是怎样完成的数据绑定?

在数据绑定过程中,Spring MVC框架会通过数据绑定组件(DataBinder)将请求参数串的内容进行类型转换,然后将转换后的值赋给控制器类中方法的形参,这样后台方法就可以正确绑定并获取客户端请求携带的参数了。

3,Spring MVC绑定数据流程

在这里插入图片描述

  1. Spring MVC将ServletRequest对象传递给DataBinder;

  2. 将处理方法的入参对象传递给DataBinder;

  3. DataBinder调用ConversionService组件进行数据类型转换、数据格式化等工作,并将ServletRequest对 象中的消息填充到参数对象中;

  4. 调用Validator组件对已经绑定了请求消息数据的参数对象进行数据合法性校验;

  5. 校验完成后会生成数据绑定结果BindingResult对象,Spring MVC会将BindingResult对象中的内容赋给处理方法的相应参数。

数据绑定分类

根据客户端请求参数类型和个数的不同,我们将Spring MVC中的数据绑定主要分为简单数据绑定复杂数据绑定

当前端请求的参数比较简单时,可以在后台方法的形参中直接使用Spring MVC提供的默认参数类型进行数据绑定。
➢HttpServletRequest: 通过request对象获取请求信息;
➢HttpServletResponse: 通过response处理响应信息;
➢HttpSession: 通过session对 象得到session中存放的对象;
➢ModelModelMap: Model是一个接口,ModelMap是一个接口实现,作用是将model数据填充到request域。

// 绑定默认的数据类型
 @RequestMapping("/selectUser1")
 public String selectUser(HttpServletRequest request) {
  String id = request.getParameter("id"); 
  System.out.println("id="+id);
  return "success";
 }
简单数据绑定

简单数据类型的绑定,就是指Java中几种基本数据类型的绑定,例如int、String、Double等类型。

//绑定简单的数据类型
 @RequestMapping("/selectUser2")
 public String selectUser2(Integer id) {
     System.out.println("id="+id);
     return "success";
 }

注意,有时候前端请求中参数名和后台控制器类方法中的形参名不一样,这就会导致后台无法正确绑定并接收到前端请求的参数。
当前端请求中参数名和后台控制器类方法中的形参名不一样的情况,可以考虑使用Spring MVC提供的@RequestParam注解类型来进行间接数据绑定。

//绑定简单的数据类型-请求参数和方法形参名字不一致时
 @RequestMapping("/selectUser3")
 public String selectUser(@RequestParam(value="user_id")Integer id) {
 // public String selectUser3(Integer id) {
     System.out.println("id="+id);
     return "success";
 }

@RequestParam注解的属性有:
在这里插入图片描述
绑定POJO类型

在使用简单数据类型绑定时,可以很容易的根据具体需求来定义方法中的形参类型和个数,然而在实际应用中,客户端请求可能会传递多个不同类型的参数数据,如果还使用简单数据类型进行绑定,那么就需要手动编写多个不同类型的参数,这种操作显然比较繁琐。
针对多类型、多参数的请求,可以使用POJO类型进行数据绑定。
POJO类型的数据绑定就是将所有关联的请求参数封装在一个POJO中,然后在方法中直接使用该POJO作为形参来完成数据绑定。

//绑定POJO类型
@RequestMapping("/registerUser")
 public String registerUser(User user) {
     String username = user.getUsername();
     Integer password = user.getPassword();
     System.out.println("username="+username);
     System.out.println("password="+password);
     return "parameters/demo1/success";
 }
复杂数据绑定
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值