




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
学习目标了解数据绑定的流程以及数据校验的方法掌握数据转换以及格式化的方式了解物料排序单打印管理模块的业务需求实现物料排序单打印管理模块的功能情景导入
数据绑定
SpringMVC进行数据绑定的核心组件是DataBinder。SpringMVC数据绑定的流程如图所示:数据绑定
数据绑定的流程分解步骤:1.用户的请求会产生一个ServletRequest对象,根据请求信息获取要处理数据的控制器方法(通过方法的签名来匹配),将ServletRequest对象及控制器方法的参数对象实例传递给DataBinder。这个步骤由SpringMVC框架来完成。2.DataBinder调用在Spring中所装配的ConversionService组件,完成数据类型转换和数据格式化工作,并将ServletRequest中的请求参数填充到控制器参数对象中。3.DataBinder调用Validator组件对已经绑定了请求信息的参数对象进行数据合法性校验。4.DataBinder将已通过校验的参数对象进行处理并绑定到BindingResult对象。此时得到的BindingResult对象包含:完成数据绑定后的参数对象。相应的校验错误对象。数据转换数据转换就是将请求中的参数信息转换为目标方法所需要的特定类型。目前可用的方法主要有两种:第一种就是Java所提供的java.beans.ProperyEditor接口。它的核心功能是将一个字符串转换为Java对象。这种“原始”的转换方式存在一些弊端:只能用于字符串和Java对象转换,无法适用于任意两个Java类型的直接转换对转换对象(包括源对象和目标对象)所在的上下文信息如注解等并不敏感第二种就是在Spring中的一个通用转换模块,这个模块位于org.springframework.core.convert包。它支持任意两种Java对象的转换,很好的弥补了ProperyEditor方式的不足。Spring同时支持这两种转换方式,SpringMVC在进行数据转换时可以搭配这两种方式。数据转换Spring通用转换模式Spring转换模块的核心接口是org.springframework.core.convert.ConversionService。publicinterfaceConversionService{booleancanConvert(Class<?>var1,Class<?>var2);booleancanConvert(TypeDescriptorvar1,TypeDescriptorvar2);<T>Tconvert(Objectvar1,Class<T>var2);Objectconvert(Objectvar1,TypeDescriptorvar2,TypeDescriptorvar3);}数据转换
类型转换器Spring的核心包中定义了org.springframework.core.convert.converter包用于存放Spring的转换器,包中定义了Convert、ConverterFactory和GenericConverter三种类型转换器接口。Convert接口publicinterfaceConverter<S,T>{Tconvert(Svar1);}数据转换
类型转换器ConverterFactory接口一般在需要将一种类型转换为另一种类型及其子类时用到,例如将String转换为Integer或Double(Integer和Double是Number的子类)。publicinterfaceConverterFactory<S,R>{<TextendsR>Converter<S,T>getConverter(Class<T>var1);}数据转换
类型转换器GenericConverter接口GenericConverter相比于Convert<S,T>而言,它在转换的时候会根据源类型对象的上下文信息进行类型转换。publicinterfaceGenericConverter{Set<GenericConverter.ConvertiblePair>getConvertibleTypes();Objectconvert(Objectvar1,TypeDescriptorvar2,TypeDescriptorvar3);......}数据转换
自定义编译器SpringMVC不但支持新的转换器框架,也支持JavaBeans的PropertyEditor。所以通过使用@InitBinder注解可以添加自定义编辑器来实现数据转换。
publicclassDateEditorextendsPropertyEditorSupport{@OverridepublicvoidsetAsText(Stringtext)throwsIllegalArgumentException{SimpleDateFormatsimpleDateFormat=newSimpleDateFormat("yyyy-MM-ddHH:mm:ss");try{Datedate=simpleDateFormat.parse(text);
setValue(date);}catch(Exceptiona)
{a.printStackTrace();}}}@InitBinderpublicvoidinitBinder(WebDataBinderbinder){binder.registerCustomEditor(Date.class,newDateEditor());}数据转换
全局自定义编辑器使用全局自定义编辑器在全局范围内进行数据转换时,需要实现WebBindingInitialzer接口以及在该实现类中注册自定义编辑器(无需在控制器中单独使用@InitBinder,只需通过在applicationContext-mvc.xml中配置全局自定义编辑器。publicclassDateBindingInitializerimplementsWebBindingInitializer{@OverridepublicvoidinitBinder(WebDataBinderwebDataBinder,WebRequestwebRequest){webDataBinder.registerCustomEditor(Date.class,newDateEditor());}}数据转换
有时,同一个Java数据类型的项目内会有多个不同的自定义转换器或者自定义编辑器存在,此时SpringMVC在选择上会遵循以下的优先级:@InitBinder装配的自定义编辑器>ConverterService装配的自定义转换器>WebBindingInitialzer装配的全局自定义编辑器转换器优先级数据格式化Java类型与String类型之间的相互转换,就是数据的格式化和解析。SpringMVC的数据格式化框架从Spring3.0版本开始引入,放在org.springframework.format包中,这个框架核心接口是Formatter。PropertyEditor和Formatter的都用于Java类型和String类型的转换,因此可以使用Formatter代替PropertyEditor进行数据解析和格式化的工作。相比于PropertyEditor,Formatter细粒度可以达到字段级别。需要注意的是,PropertyEditor和Formatter只能将String类型和其他Java类型进行转换,因此源类型和目标类型必须有一者是String类型。因此相比于Converter转换器,Formatter更适合在处理用户请求时使用,而Converter则适用于任意情况下的数据转换。数据格式化
Formatter接口Formatter属于Spring通用转换模块,在Spring项目的任意位置都可以使用它来完成数据解析和格式化。数据格式化
Printer接口Printer用于对象的格式化,即Java类型到String的转换。在Printer<T>中定义了方法print(Tvar1,Localevar2),它的作用是根据Locale类型对象中所包含的本地化信息(用于告知SpringMVC如何进行格式化的信息),将T类型的对象以某种格式转换为String类型的对象。publicinterfacePrinter<T>{//Locale类型的var2中包含本地化信息Stringprint(Tvar1,Localevar2);}数据格式化
Parser接口Parser用于String类型对象的解析。Parser中定义方法parse(Stringvar1,Localevar2),它的作用是根据Locale类型对象中所包含的本地化信息,将String类型的对象以某种格式转换为T类型的对象。publicinterfaceParser<T>{
Tparse(Stringvar1,Localevar2)throwsParseException;
}数据格式化
Formatter接口Formatter继承Printer和Parser,没有特有的接口方法,可以根据不同的需要来完成T类型对象的解析和格式化两种工作。publicinterfaceFormatter<T>extendsPrinter<T>,Parser<T>{}数据格式化
注解方式实现格式化使用AnnotationFormarmatterFactory<AextendsAnnotation>是通过注解方式实现数据的格式化转换。它的实现需要通过以下几个步骤:对Bean属性进行配置SpringMVC处理方法参数绑定数据在控制器添加注解,使模型数据输出时按照相应的注解进行数据格式化转换,用到的注解分别是:@DateTimeFormatter和@NumberFormatter。这两个注解所有的属性都是互斥的,只能出现其中的一个属性数据校验Web应用是面向所有网络用户群体的,在输入时可能会产生非法数据,因此Web应用通常都需要将这些非法数据过滤掉,而这个非法数据的过滤过程就是数据校验。根据Web应用的机制通常将数据验证分为客户端验证和服务端验证。客户端校验是由客户端程序进行的数据校验,一般用来防止正常用户的错误输入客户端校验服务端校验服务端校验是由服务端程序进行的数据校验,一般用来防止恶意用户的恶意输入,而这些恶意输入一般都是客户端无法完成的。数据校验
Validation校验Validation校验是Spring独立的数据校验框架。接下来对Validation校验的一些重要的类和接口进行介绍:Validator:Spring进行数据校验的核心接口Errors:用于保存校验结果的参数对象类型有两种,分别为Errors和BindingResult。
BindingResult作为Errors的扩展,可以同时获取数据绑定结果对象信息validationUtils:Spring提供的工具类,用于给Errors对象保存错误LocalValidatorFactoryBean:同时实现了Spring的Validator接口和JSR303的Validator接口数据校验
JSR303校验JSR303是JavaEE6中的一项子规范,是Java为Bean数据的合法性校验所提供的一个标准规范。这个规范就是BeanValidation。它主
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 《烙饼问题》(教学设计)-2023-2024学年四年级下册数学北师大版
- 一年级语文下册 课文 5 口语交际:一起做游戏教学实录 新人教版
- 江苏省江阴市成化高级中学高中地理 5.2环境管理的国际合作教学实录 新人教版选修6
- 牛津译林版九年级英语上册教学工作计划(及进度表)
- nvme协议中安全分区状态
- nfs异步读写逻辑
- 《第三单元 智能设计与制作体验 13 指挥机器人》教学设计2023-2024学年南方版(湖南)(2019)信息技术六年级下册
- 有效的班级时间管理计划
- 建立标准化服务流程的实施计划
- 成本控制在财务管理中的应用计划
- 2024年河南省中考满分作文《成功所至诸径共趋》
- 2025年陕西国防工业职业技术学院单招综合素质考试题库学生专用
- 2025年浙江宁波市奉化区农商控股集团有限公司招聘笔试参考题库附带答案详解
- 2025年中考百日誓师大会校长发言稿:激扬青春志 决胜中考时
- (一模)2025年汕头市2025届高三高考第一次模拟考试 语文试卷(含答案详解)
- 上海浦东新区2024-2025高三上学期期末教学质量检测(一模)物理试卷(解析版)
- 2023年中小学心理健康教育课程标准
- 2025河南中烟工业限责任公司一线岗位招聘128人易考易错模拟试题(共500题)试卷后附参考答案
- 附录6眼保健操图解
- 公司往来客户对帐确认单 6个套模版
- 云管理系统CRM系统操作手册
评论
0/150
提交评论