1. 前言
Validator开发者使用手册,适用后台校验功能的开发参考。文档中提到的功能,都是经过严谨测试验证过的,保证可用,请开发人员放心设计和开发。
1.1. 背景
在我们日常后台的开发中,涉及到很多的字段验证,一般普通的验证框架就基本上可以满足日常的开发需求,但有一些情况,这些普通的验证框架无法达到要求,例如,现在有一个Segment类,里面有一个属性deptCity,但这个类同时用于多个接口中,比如说用到选取可利用航班以及选取目的航班中,在选取可利用航班这个接口中,deptCity是必输项,格式为[A-Z]{3},但是选取目的航班接口中,deptCity不是必输项,这时候问题就出现了,我们必须对验证的属性进行分组,于是就产生了我们的Validator验证框架。当然,我们的验证框架不仅仅只提供了分组的功能,欲知后事,请看下文分解。
1.2. 联系我们
在开发中遇到的任何问题,或者需要技术支持的地方,可以联系我们:
924580006@qq.com
2. 参考文档
《Hibernate Validator - 5.1.0 - 英文版.pdf》
3. 概览
3.1. 工作模式和配置模式
Validator提供两种工作模式:
1、普通模式
2、快速失败返回模式
默认的工作模式为快速失败返回模式,一旦发现校验失败项,立即返回。普通模式在测试时期可以使用,可以对全部的校验项进行完整的校验(校验组序列,以及基于校验组序列的其他配置无效),通过修改配置文件中的校验模式,从而实现工作模式的自由切换。开发人员无需关心其中的原理和过程。
两种配置模式:Annotation和Xml文件(此处略)。
推荐使用Annotation注解模式。
工作模式配置如下:
validator.fail_fast:快速失败返回模式(只要有一个验证失败,则返回异常)
validator.normal:普通模式(会校验完所有的属性,然后返回所有的验证失败信息)
3.2. 校验功能
Validator校验框架按照Bean Validation的规范,使用了Hibernate Validatior框架。当前通过测试验证的可以支持的功能有:
1、内置注解校验
2、对象图级联校验
3、校验组分组校验
4、校验组序列
5、自定义默认校验组功能
6、自定义智能默认校验组功能
7、自定义校验注解
8、类校验——类属性的关联校验
下面将首先给出各个场景的具体的开发方法,而后介绍各个功能的应用场景,供大家定位自己的需求适用于哪几种场景的整合。
此外,框架还内嵌了一些非法校验的功能,比如输入的校验对象为null,或者指定的对象的属性值错误,都会自行抛出异常。
4. Validator的使用方法
4.1. Validator的jar包
目前,Validator的版本为2.0.0,后面可能会涉及到版本的更新,具体版本请和开发人员联系。原始工程为Maven工程,使用的时候,只需要导入Validator依赖的pom文件以及进行简单的配置即可。
<dependency>
<groupId>com.chhliu.common</groupId>
<artifactId>validate</artifactId>
<version>2.0.0</version>
</dependency>
4.2. Validator的配置文件
配置文件可以从jar包里面获取,或者直接找开发人员获取皆可,使用的时候,直接加入类路径下即可。附件部分给出了Validator依赖的pom文件。配置文件如下:
<bean id="baseValidator" class="com.chhliu.common.validator.BaseValidator">
<property name="validatorMode">
<!-- 校验器的工作模式:
validator.fail_fast:快速失败返回模式(只要有一个验证失败,则返回异常)
validator.normal:普通模式(会校验完所有的属性,然后返回所有的验证失败信息)
-->
<value>validator.normal</value>
</property>
</bean>
4.3. Validator接口
使用Validator的校验框架非常的简单,只需要注入Validator接口即可:
@Autowired
private Validator validator;
4.4. Validator中的方法
Validator提供了6个校验接口供开发人员使用:
1、<T> void validate(T object) throws Exception
用途:校验一个对象的默认校验组的属性。
2、<T> void validate(T object, Class<?>... groups) throws Exception
用途:校验一个对象的指定的一个或多个校验组的属性。
3、<T> void validateProperty(T object, String propertyName) throws Exception
用途:校验一个对象的默认校验组的一个指定的属性值。
4、<T> void validateProperty(T object, String propertyName, Class<?>... groups) throws Exception
用途:校验一个对象指定校验组中的一个指定的属性值。
5、<T> void validateValue(Class<T> beanType, String propertyName, Object value) throws Exception
用途:校验一个value是否符合指定类的默认校验组下的某一个属性值。
6、<T> void validateValue(Class<T> beanType, String propertyName, Object value, Class<?>... groups) throws Exception
用途:校验一个value是否符合指定类的指定校验组下的某一个属性值。
4.5. 测试类
大家可以从工程源码的测试目录中,找到测试类,所有的测试类都可以正常运行,并加入了详细的注释说明。
5. 各个校验功能的开发指南
本章节提供了各种校验功能具体的开发方法,基本能够满足开发人员所有 的校验需求。(所有的实体类省略了get和set方法)
5.1. 内置注解校验
适用场景:简单的单属性的校验。
内置的校验注解共分为三种:Bean Validation内置的校验注解和Hibernate Validator拓展的校验注解以及框架自带的校验注解。推荐大家首先考虑使用这些注解,简单易用。
使用方法:
public class RangeModel {
@Length(min=5, max=17)
private String length;
@Size(min=1, max=3)
private String age;
@Range(min=150,max=250)
private int high;