SpringMVC数据绑定

  1. 什么是数据绑定
    在客户端向服务端发送请求的过程中,可能有参数,此时我们需要在处理器方法的形参获取此参数。所以就需要对请求参数和方法上的形参进行建立连接。连接的过程中就是数据绑定。

  2. 数据绑定的原理
    SpringMVC会把ServletRequest传递给DataBinder,然后把形参上的对象传递给DataBinder,DataBinder调用ConversionServlet进行数据类型转换和格式化,并把数据填充到对象中。然后校验是否合法,合法的话就生成BindingResult,把数据赋值给处理器方法上的形参
    SpringMVC数据绑定_第1张图片
    数据绑定分为简单数据绑定复杂数据绑定
    一、简单数据类型绑定

  3. 默认类型数据绑定
    常见的默认类型

    1. HttpServletRequest:获取请求信息
    2. HttpServletResponse:处理响应信息
    3. HttpSession:获取session中存放的信息
    4. Model/ModelMap:Model是一个接口,ModelMap是一个类,Model的实现类对象和ModelMap对象都可以设置model数据,model数据会填充到request域。
      SpringMVC数据绑定_第2张图片
  4. 简单数据类型数据绑定
    形参是java的简单数据类型。如String,int等。 SpringMVC数据绑定_第3张图片
    7. POJO绑定
    一般情况传输的数据较多,所以需要用类将其封装,形参只要用对象去接收就好,不用写太多的简单数据类型。
    SpringMVC数据绑定_第4张图片
    SpringMVC数据绑定_第5张图片

  5. 自定义转换器
    springmvc没有帮我们把字符串转为日期,所以需要自己配置
    springmvc.xml配置

    
    
        
            
                
            
        
    

    

自定义类

/**
 * 1.自定义日期类型转换器,实现Convert接口(S,R)
 * S-原始类型
 * R-转换后类型
 */
public class DateConverter implements Converter {
    @Override
    public Date convert(String dateStr) {
        Date date=null;
        try {
            date = new SimpleDateFormat("yyyy-MM-dd").parse(dateStr);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return date;
    }
}

二、复杂数据绑定

  1. 数组
    SpringMVC数据绑定_第6张图片
    SpringMVC数据绑定_第7张图片

  2. 集合,需要@RequestParam注解。postman发送方式同数组一样
    SpringMVC数据绑定_第8张图片

  3. 复杂POJO ,属性可能有对象 list map 数组等复杂类型

    1. 对象SpringMVC数据绑定_第9张图片
    2. 接口SpringMVC数据绑定_第10张图片
    3. postman传输格式SpringMVC数据绑定_第11张图片
  4. Json数据格式传输
    因为Json数据解析速度更快,占用空间更小,所以一般开发用Json数据传输。
    springmvc中导入依赖

    
      com.fasterxml.jackson.core
      jackson-databind
      2.9.8
    
    
      com.alibaba
      fastjson
      1.2.54
    

springmvc.xml配置

   

SpringMVC数据绑定_第12张图片
SpringMVC数据绑定_第13张图片

  1. @PathValiable,@RequestParam,@ResponseBody的区别?
    @RequestParam:接收url传参和表单传参
    @ResponseBody:接收Json数据
    @PathValiable:接收restful风格的请求,如/{id}

代码:https://gitee.com/lin_zixiang/programming-daily/tree/master/springmvc_restful

你可能感兴趣的:(web日常,java,servlet,前端)