1.数据绑定流程

  --1). Spring MVC主框架将ServletRequest对象及目标方法入参实例传递给WebDataBinderFactory实例,以创建DataBinder实例对象。

  --2). DataBinder 调用装配在 SpringMVC上下文中的ConversionService组件进行数据类型转换,数据格式化工作。将servlet中的请求信息填充到入参对象中

  --3). 调用Validator组件对已经绑定了请求信息的入参对象进行数据合法性校验,并最终生成数据绑定结果 BindingData对象

  --4). Spring MVC 抽取BindingResult中的入参对象和校验错误对象,将他们赋给处理方法的响应入参。

    

  --源码分析

    --108行绑定数据

    -- 109格式校验

    

  -- 总结图

    

2. 数据转换

   

  

  -- 自定义类型转换器

    1)ConversionService是Spring类型转换体系的核心接口

    2)可以利用ConversionServiceFactoryBean在Spring的IOC容器中定义一个 ConversionService。Spring将自动识别出IOC容器中的ConversionService,并在Bean属性配置及Spring MVC处理方法入参绑定等场合使用它进行数据的转换

    3)可通过ConversionServiceFactoryBean的converters属性注册自定义的类型转换器

    

  -- Spring定义了3种类型的转换器接口,实现任意一个转换器接口都可以作为自定义转换器注册到ConversionServiceFactoryBean种:

      -- Converter<S,T>, 将S类型转换为T类型

      -- ConverterFactory: 将相同系列多个“同质”Converter封装在一起,如果希望将一种类型的对象转换为另一种类型机器子类的对象(即将String转换为Number及Number的子类)

      -- GenericConverter 会根据源类对象及目标类对象所在的宿主类章的上下文信息进行类型转换

  -- 在配置文件中,<mvc:annotation-driven conversion-service= "conversionService"/>会将自定义的ConversionService注册到Spring MVC的上下文中

    

  -- 看个例子豁然开朗

    1)表单

      

    2)handler

      

    3)实现我们的Converter  从字符串到Employee

      

    4)将我们的converter放到conversionservice中,conversionservice配置到springmvc中

        

3. mvc:annotation-driven

  

    --注意,debug相关细节

    

4. @InitBinder

  -- 由@InitBinder标识的方法,可以对WebDataBinder对象进行初始化。WebDataBinder是DataBinder的子类,用于完成由表单字段到JavaBean属性的绑定

  -- @InitBinder方法不能有返回值,它必须声明为void

  -- @InitBinder方法的参数通常是WebDataBinder

5.数据格式化(本质上就是数据类型转换)

  看个例子:

  1)首先 mvc:annotation-driven

    

  2)定义birth和salary,并加注解,getter,setter不要忘了

    

  3)jsp

    

  这样就可以了

    

   原理:

      

       

       

        

        日期格式化

        

          数值格式化

       

6. 数据校验

  1)如何校验?注解

    ① 使用JSR 303验证标准

    ② 加入hibernate validator验证框架的jar包

    ③ 在SpringMVC配置文件中添加 <mvc:annotation-driven/>

    ④ 需要在bean的属性上添加对应的注解

    ⑤ 在目标方法bean类型的前面添加 @Valid注解

  2)验证出错转向哪个页面?

    注意,需校验的Bean对象和其绑定结果对象或错误对象时成对出现的,它们之间不允许声明其他的入参

  3)错误消息如何回显?错误消息如何国际化

    ① 对应jsp中, <form:errors>标签

    ② 国际化资源文件中。键:校验注解类名.Bean.校验属性值

SpringMVC听课笔记(九:数据转换 & 数据格式化 & 数据校验)的更多相关文章

  1. SpringMVC听课笔记(一:SpringMVC概述)

    地址 :https://www.bilibili.com/video/av14907450 版本:4.x 概述: 概要: 一:SpringMVC概述 二:SpringMVC的 HelloWorld 三 ...

  2. SpringMVC 数据转换 & 数据格式化 & 数据校验

    数据绑定流程 1. Spring MVC 主框架将 ServletRequest 对象及目标方法的入参实例传递给 WebDataBinderFactory 实例,以创建 DataBinder 实例对象 ...

  3. SpringMVC——数据转换 & 数据格式化 & 数据校验

    一.数据绑定流程 1. Spring MVC 主框架将 ServletRequest 对象及目标方 法的入参实例传递给 WebDataBinderFactory 实例,以创 建 DataBinder ...

  4. SpringMVC的数据转换&&数据格式化&&数据校验

    1 SpringMVC的数据绑定流程 SpringMVC将ServletRequest对象及目标方法的入参实例传递给WebDataBinderFactory实例,以创建DataBinder实例对象. ...

  5. Spring MVC @InitBinder 数据绑定 & 数据格式化 & 数据校验

    1 数据绑定 2 数据格式化 修改绑定的字段等等操作 日期 - 接收表单日期字符串格式内容.,在实体类加入@DateTimeFormat 数值 原理: DefautFormattingConversi ...

  6. SpringMVC听课笔记(五:处理模型数据)

    1. Spring MVC 提供了以下几种途径输出数据模型 -- ModelAndView: 处理方法返回值类型为ModelAndView 时,方法体即可通过该对象添加模型数据 -- Map及Mode ...

  7. SpringMVC:学习笔记(6)——转换器和格式化

    转换器和格式化 说明 SpringMVC的数据绑定并非没有限制,有案例表明,在SpringMVC如何正确绑定数据方面是杂乱无章的,比如在处理日期映射到Date对象上. 为了能够让SpringMVC进行 ...

  8. SpringMVC学习笔记九:拦截器及拦截器的简单实用

    SpringMVC中的interceptor拦截器是非常重要的,它的主要作用就是拦截指定的用户请求,并进行相应的预处理和后处理. 拦截时间点在"处理器映射器根据用户提交的请求映射出所要执行的 ...

  9. SpringMVC听课笔记(十四:异常处理)

    1. SpringMVC通过HandlerExceptionResolver处理程序的异常,包括Handler映射,数据绑定以及目标方法执行时发生的异常 2.SpringMVC提供的HandlerEx ...

随机推荐

  1. String 类的常用方法都有那些?

    1.indexOf():返回指定字符的索引. 2.charAt():返回指定索引处的字符. 3.replace():字符串替换. 4.trim():去除字符串两端空白. 5.split():分割字符串 ...

  2. 计算-服务器最大并发量-http协议请求-以webSphere服务器为例-考虑线程池

    请求的处理流程 广域网上有大量的并发用户同时访问Web服务器,Web服务器传递请求给应用服务器(Web容器),Web容器传递请求给EJB容器,然后EJB容器发送数据库连接请求给数据库. 请求的处理流程 ...

  3. Win Task 任务管理器 批量杀进程方法

    Example Kill All Chrome & Chrome Driver taskkill /IM chromedriver.exe /F taskkill /IM chrome.exe ...

  4. 风炫安全web安全学习第三十七节课 15种上传漏洞讲解(二)

    风炫安全web安全学习第三十七节课 15种上传漏洞讲解(二) 05后缀名黑名单校验之上传.htaccess绕过 还是使用黑名单,禁止上传所有web容器能解析的脚本文件的后缀 $is_upload = ...

  5. 【剑指 Offer】06.从尾到头打印链表

    题目描述 输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回). 示例 1: 输入:head = [1,3,2] 输出:[2,3,1] 限制: 0 <= 链表长度 <= 10 ...

  6. LeetCode344 反转字符串

    编写一个函数,其作用是将输入的字符串反转过来. 示例 1: 输入: "hello" 输出: "olleh" 示例 2: 输入: "A man, a p ...

  7. Flutter 基础组件:输入框和表单

    前言 Material组件库中提供了输入框组件TextField和表单组件Form. 输入框TextField 接口描述 const TextField({ Key key, // 编辑框的控制器,通 ...

  8. 搭乘“AI大数据”快车,肌肤管家,助力美业数字化发展

    经过疫情的发酵,加速推动各行各业进入数据时代的步伐.美业,一个通过自身技术.产品让用户变美的行业,在AI大数据的加持下表现尤为突出. 对于美妆护肤企业来说,一边是进入存量市场,一边是疫后的复苏期,一边 ...

  9. centos 6.5 下安装RabbitMQ-3.7.28 二进制版本

    centos 6.5 下安装RabbitMQ-3.7.28 二进制版本 安装依赖: yum install -y ncurses-devel socat logrotatewxWidgets-deve ...

  10. 【Java】运算符(算术、赋值、比较(关系)、逻辑、条件、位运算符)

    运算符 文章目录 运算符 1. 算术运算符 2. 赋值运算符 3. 比较运算符 4. 逻辑运算符 5. 条件运算符 6. 位运算符 7. 运算符优先级 8. 运算符操作数类型说明 9.code 算术运 ...