2019.12图1
ServletRequest 处理方法入参对象
数据类型转换/格式化
DataBinder
ConversionService
数据校验
Validator
BindingRusult
处理方法的签名
1
2
3
4
5
1DataBinder数据绑定流程
对于表单的数据校验通常要进行客户端和服务器端的双重校验,客户端校验主要是基于JS技术实现,但其安全性不高,用户可绕过客户端校验,所以服务器端的校验就显得尤为重要,是用户数据安全与合法性的最安全也是最后一道屏障。是基于SpringMVC框架下的数据校验,框架基于反射机制,提供了一个核心组件DataBinder用于数据绑定[1]。其数据绑定机制的流程如图1所示。
2Converter类型转换
SpringMVC框架提供了一个类型转换体现中的核心接口ConversionService,并提供了一个上下文的Con
ver⁃sionServiceFactoryBean的实现类,其内置了很多系统提供的类型转换器,它们可以完成大多数Java类型数据转换,开发者也可以通过converters属性来注册自定义的类型转换器。
开发者可以开发任意的自定义类型转换器,只需让该自定义类型转换器类实现一个Converter<T,S>接口,其中T表示待转换的类型,S表示要转换的目标对象类型,并实现该接口中的T conver(S source)抽象方法,把需要转换的S类型对象按照自定义的转换规则进行处理,最终返回T类型的目标转换对象即可。例如可将表单中填写的字符串类型数据转换成一个User类型数据,其核心代码如下所示:
public cla ss String2UserConverter implements Con⁃verter<String,User>{
private String typePattern;
//提供对应的typePattern属性的getter/setter方法(省略) public User convert(String value){
String[]params=value.split(typePattern);
User user=new User();
user.setName(params[0]);
user.setPassword(params[1]);
return user;
}
}
在SpringMVC框架的核心配置文件中进行自定义类型转换器的注册,其配置代码如下:
<bean id="cs"class="t. support.ConversionServiceFactoryBean">
<property name="converters">
<list>
<bean class="cn.sjx verter.
基于SpringMVC框架的表单校验与异常处理应用与实战研究
李晓明1,黄慧1,应毅1,刘洋2
(1.三江学院计算机科学与工程学院,南京210012;2.江苏省清江中学,江苏淮安223001)摘要:在“
互联网+”的智能与信息化时代,任何一个应用系统都离不开数据校验,尤其是对于表单的数据校验。基于SpringMVC框架,从数据绑定的机制与流程进行分析,对表单数据的类型转换、格式化、合法性数据校验及异常的国际化处理提供实现与优化方案,总结了基于SpringMVC框架下的表单数据校验与异常国际化处理的应用与实战过程,体现了数据校验对于智能与信息化系统的安全性、健壮性的重要作用。
关键词:SpringMVC框架;类型转换;格式化;数据校验
基金项目:三江学院2019年校级特教材项目“JavaEE
企业级应用开发从入门到实战(Spring+SpringMVC+My⁃
Batis)”(J19030);江苏省高等学校自然科学研究项目
“大数据质量关键技术研究及其在智慧医疗中的应用”
(19KJB520049)。
作者简介:李晓明(1978-),男,硕士,讲师,研究方
向:人工智能、Java与大数据应用开发等。
26
2019.12
String2UserConverter">
<property name="typePattern"value="-"/></bean></list></property></bean>
3Formatter 格式化
在开发中通常表单的数据只能输入字符串,开发者
只要负责字符串类型的数据转换就可以了,SpringMVC 框架也给开发者提供了Formatter<T>接口,该接口的作用就是将String 转换成任意的T 类型,或将T 类型反转为String 字符串类型,采用的是ConversionService 接口的实现类FormattingConversionServiceFactoryBean 完成其自定义格式化数据的类型转换功能的。其在核心配置文件中的配置代码如下所示。
<bean id="fcs”class="….FormattingConversionSer⁃viceFactoryBean">
<property name="formatters">
<bean class ="cn.sjxy.springmvc.formatter.
StringToPointFormatter"/>
</property></bean>
在开发中当需要进行自定义类型转换时,通常会选择采用实现Formatter<T>接口方式进行类型转换,而且从Spring3.0后也提供了基于注解方式的数据格式化功能。
4数据校验与异常国际化处理
对于数据校验,Spring 也拥有自己独立的校验框
架,可以通过编程方式来实现对表单的数据的校验,但该方式还是显得有些繁琐,且代码耦合度较高,灵活性差,也不推荐在开发中使用。Spring 提倡使用基于JSR303标准的校验方式,但其没有提供实现,需要借助实现JSR303标准的Hibernate Validator 校验框架完成数据校验,其具体的实现步骤如下所示:
第1步:导入Hibernate Validator 对应的JAR 包。第2步:在实体类上添加对应的格式化与校验注解,其示例代码如下:
public class Customer {
@NotBlank(message ="登录名称不能为空")
@Length(min =8,max =16,message ="登录名称字符长度必须在8~16位之间")
private String loginName;
@NotBlank(message="密码不能为空")
@Length(min =6,max =12,message ="密码的字符长度必须在6~12位之间")
private String loginPwd;
@Range(min =15,max=70,message ="客户的年龄必须在15~70岁之间")
private int age;
@Email(message ="E-mail 地址格式不正确")private String email;
@DateTimeFormat(pattern ="yyyy-MM-dd")
@Past(message ="客户的生日必须是一个过去的时间")private Date birthday;
@Pattern (regexp ="[1][3,5,7,8][2,3,8,9][0-9]{8}",message ="无效的电话号码")
private String phone;
//提供对应的getter/setter 方法(省略)…}
第3步:创建验证错误的国际化资源文件。如创建名称为message_zh_CN.properties 的文件,在该文件中添加如下内容:
typeMismatch.customer.birthday=日期格式错误typeMismatch.customer.age=年龄不能为空或格式化错误
Pattern.customer.phone=无效的电话号码
其中typeMismatch 表示类型绑定错误,当数据绑定发生数据类型不匹配时会显示该错误消息。
第4步:SpringMVC 核心配置文件中添加对注册校验器与异常错误消息属性文件的配置。
第5步:创建控制器类,并在控制器类对应的请求处理方法上使用@Valid 注解进行修饰,用于对关联对
象随用JSR303校验。
第6步:在测试页面上使用SpringMVC 的form 标签进行数据绑定及对错误校验消息的数据回显。启动服务器,输入对应的测试页面,其运行的校验错误结果如图2所示。
5结语
基于SpringMVC 框架,利用JSR303规范,通
过
(下转第36页
)
图2
27
2019.12
[6]李大志,李强,刘玉梅.评价大学生心理健康状况
的模糊数学方法[J].大学数学,2007,23(6):
113-116.
[7]邹国振,李国岳.大学生幸福感的影响因素及提升策
略[J].思想政治教育研究,2012,28(3):118-121.
Hibernate Validation 校验框架来完成对表单的数据校验及异常的国际化显示处理是一个最好的处理校验方式,
建议开发者使用。
参考文献
[1]疯狂软件.Spring+MyBatis 企业应用实战[M].电
子工业出版社,2017.
[2]丁振凡,吴根斌.Spring3.x MVC 模型的数据校验国
springmvc考试选择题际化处理[J].计算机时代,2012,(08).[3]须木一瓜.SpringMVC 数据的格式化、JSR303数据
校验和国际化.2016.
输入约束规则。如表2所示。
生成具体输入约束规则后,就可以使用传统的等价类、边界值、异常值覆盖等测试设计方法来自动生成每个输入类控件对应的测试数据集。
6测试用例和测试数据进行关联的方法
基于MBT 建模设计方法生成测试用例步骤后,根
据抽取的原子操作关键字分析比对出测试用例中所涉及的输入控件,测试平台可以据之到关联的测试数据,由于肯定存在多个原子操作,并且可能原子操作内涉及多个输入类控件,因此需要基于灵活的组合策略来生成具体的测试用例。生成测试用例的组合策略一般有配对组合法和正交法,以及全组合策略。但是一般情况下不使用全组合策略,全组合策略将导致用例爆炸,使得测试无法收敛。
7结语
自动化测试平台在实现测试设计自动化和零编码自动化测试开发后,主要取得了如下几个方面的提升:(1)大幅减少测试设计工作的人工投入,测试用例
设计步骤上人工只需要对业务进行精准建模分析即可,测试数据设计步骤上只需要梳理前端输入约束并且是根据通用规则库可以自动生成约束规则集,具体测试用例生成只需按需选择覆盖准则即可实现。
(2)通过实现零编码测试开发框架,最大程度地降
低了自动化测试的技术门槛,实现在功能测试中大范围推广自动化测试。功能测试人员无须开发自动化测试脚本,通过组装自动化测试框架封装好的原子操作,就可以轻松实现测试用例的自动化。
(3)通过解析测试用例为“原子操作+测试数据”,可实现测试用例自动转成对应的自动化测试脚本,无需人工干预。最大程度地提升了自动化测试开发的效率。(4)实现全面功能自动化测试后,测试开发和测试执行时长大大缩短,测试结果也能在线自动生成,大幅度提升了测试工作的效率,缩短研发交付周期,从而提升了研发团队的整体交付能力。
参考文献
[1][美]保罗﹒C ﹒乔根森(Paul C ﹒Jorgensen).基于
模型的测试,北京:机械工业出版社,2019.[2]朱少民.全程软件测试.3版.北京:人民邮件出版社,2019.
[3]茹炳晟.测试工程师全栈技术进阶与实践.北京:
人民邮件出版社,2019.[4]刘琛梅.测试架构师修炼之道.北京:机械工业出版社,2016.
[5]陈绍英,许威,金成姬.大型IT 系统智能一体化测
试.北京:电子工业出版社,2017.
页面参数中文名参数英文名输入类型规则类型具体约束值
添加需求
优先级
Priority num range [1,3]添加需求需求名称Demand_Name string
length
[1,128]添加需求需求名称
Demand_Name
string allowEmptyValue
False 添加需求需求描述Demand_Description string
length
[1,512]
表2
(上接第27页)
(上接第31页)
36
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论