SpringMVC听课笔记(九:数据转换 & 数据格式化 & 数据校验)
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听课笔记(九:数据转换 & 数据格式化 & 数据校验)的更多相关文章
- SpringMVC听课笔记(一:SpringMVC概述)
地址 :https://www.bilibili.com/video/av14907450 版本:4.x 概述: 概要: 一:SpringMVC概述 二:SpringMVC的 HelloWorld 三 ...
- SpringMVC 数据转换 & 数据格式化 & 数据校验
数据绑定流程 1. Spring MVC 主框架将 ServletRequest 对象及目标方法的入参实例传递给 WebDataBinderFactory 实例,以创建 DataBinder 实例对象 ...
- SpringMVC——数据转换 & 数据格式化 & 数据校验
一.数据绑定流程 1. Spring MVC 主框架将 ServletRequest 对象及目标方 法的入参实例传递给 WebDataBinderFactory 实例,以创 建 DataBinder ...
- SpringMVC的数据转换&&数据格式化&&数据校验
1 SpringMVC的数据绑定流程 SpringMVC将ServletRequest对象及目标方法的入参实例传递给WebDataBinderFactory实例,以创建DataBinder实例对象. ...
- Spring MVC @InitBinder 数据绑定 & 数据格式化 & 数据校验
1 数据绑定 2 数据格式化 修改绑定的字段等等操作 日期 - 接收表单日期字符串格式内容.,在实体类加入@DateTimeFormat 数值 原理: DefautFormattingConversi ...
- SpringMVC听课笔记(五:处理模型数据)
1. Spring MVC 提供了以下几种途径输出数据模型 -- ModelAndView: 处理方法返回值类型为ModelAndView 时,方法体即可通过该对象添加模型数据 -- Map及Mode ...
- SpringMVC:学习笔记(6)——转换器和格式化
转换器和格式化 说明 SpringMVC的数据绑定并非没有限制,有案例表明,在SpringMVC如何正确绑定数据方面是杂乱无章的,比如在处理日期映射到Date对象上. 为了能够让SpringMVC进行 ...
- SpringMVC学习笔记九:拦截器及拦截器的简单实用
SpringMVC中的interceptor拦截器是非常重要的,它的主要作用就是拦截指定的用户请求,并进行相应的预处理和后处理. 拦截时间点在"处理器映射器根据用户提交的请求映射出所要执行的 ...
- SpringMVC听课笔记(十四:异常处理)
1. SpringMVC通过HandlerExceptionResolver处理程序的异常,包括Handler映射,数据绑定以及目标方法执行时发生的异常 2.SpringMVC提供的HandlerEx ...
随机推荐
- 有关CSS 定位中的盒装模型、position、z-index的学习心得
开始整体之前我需要说明两个概念: 第一个就是 一切皆为框 也就是说在HTML中的不管是是块级的还是内联的,都可以认为成块的,唯一的区别就是块的会独自占据一行 第二个文档流: 一个网页可以看作是 ...
- 对象、对象监视器、同步队列、执行线程关系(synchronized的实现细节或原理)
synchronized在使用的时候底层细节你了解吗,相信很多同学对细节很少关注:比如竞争失败了的线程怎么安置,每个对象的监视器,线程执行synchronized时,其实是获取对象的监视器才能进入同步 ...
- 【老孟Flutter】Flutter 中与平台相关的生命周期
老孟导读:关于生命周期的文章共有2篇,一篇(此篇)是介绍 Flutter 中Stateful 组件的生命周期. 第二篇是 Flutter 中与平台相关的生命周期, 博客地址:http://laomen ...
- vue中Echarts的使用-自选效果
由于项目要求使用数据图,于是我选择了我们的Echarts用来实现效果 一:全局安装Echarts npm install echarts --save(这个安装的是最新的版本有时候回报init未定义) ...
- hdp、cdh版本大数据maven仓库
Hdp版本: <repositories> <repository> <id>nexus</id> <name>local private ...
- 杭电OJ2039——三角形(c++)(易错题:数据类型不确定)
三角形 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submis ...
- 项目API接口鉴权流程总结
权益需求对接中,公司跟第三方公司合作,有时我们可能作为甲方,提供接口给对方,有时我们也作为乙方,调对方接口,这就需要API使用签名方法(Sign)对接口进行鉴权.每一次请求都需要在请求中包含签名信息, ...
- Label_img&a
绝对路径 相对路径 从根目录开始写 从引用的文件所在目录开始写 也可以作为链接提示 target = _blank 新窗口打开 = _self 默认值 本窗口打开 = _new 新窗口打开 = _pa ...
- GitLab的安装及使用
Gitlab环境部署 安装依赖包. sudo yum install -y curl policycoreutils-python openssh-server 设置SSH开机自启动并启动SSH服 ...
- Zap简单使用
前言 zap 是 uber 开源的一个日志记录的包, uber 在 go 的领域建树颇多, zap 更是优秀, 相比于自带的 log ,他有更多的功能, 当然, 最显眼的还是他很快, 本文介绍 zap ...