项目介绍
java 开发中,参数校验是非常常见的需求。但是 hibernate-validator 在使用过程中,依然会存在一些问题。
validator[1] 在 hibernate-validator 等校验工具之上,做了一些改进,使其使用更加便捷优雅,进一步提升工作效率。
特性
•
支持 fluent-validation
•
支持 jsr-303 注解
•
支持 i18n
•
支持用户自定义策略
•
支持用户自定义注解
•
支持针对属性的校验
•
支持过程式编程与注解式编程
•
支持指定校验生效的条件
创作目的
hibernate-validator 无法满足的场景
如今 java 最流行的 hibernate-validator 框架,但是有些场景是无法满足的。
比如:
1.
验证新密码和确认密码是否相同。(同一对象下的不同属性之间关系)
2.
当一个属性值满足某个条件时,才进行其他值的参数校验。
3.
多个属性值,至少有一个不能为 null
其实,在对于多个字段的关联关系处理时,hibernate-validator 就会比较弱。
本项目结合原有的优点,进行这一点的功能强化。
validation-api 过于复杂
validation-api 提供了丰富的特性定义,也同时带来了一个问题。
实现起来,特别复杂。
然而我们实际使用中,常常不需要这么复杂的实现。
validator-api 提供了一套简化很多的 api,便于用户自行实现。
自定义缺乏灵活性
hibernate-validator 在使用中,自定义约束实现是基于注解的,针对单个属性校验不够灵活。
本项目中,将属性校验约束和注解约束区分开,便于复用和拓展。
过程式编程 vs 注解式编程
hibernate-validator 核心支持的是注解式编程,基于 bean 的校验。
一个问题是针对属性校验不灵活,有时候针对 bean 的校验,还是要自己写判断。
本项目支持 fluent-api 进行过程式编程,同时支持注解式编程。
尽可能兼顾灵活性与便利性。
快速开始
准备工作
JDK1.7+
Maven 3.X+
maven 引入
快速入门
定义对象
第一步,我们定义一个常见的 java bean 对象,可以指定内置的注解。
支持 jsr-303 注解和 hibernate-validator 的注解。
ValidHelper 工具方法
ValidHelper 作为统一封装的工具类,提供了 java bean 校验常见的方法。
方法列表:
使用起来很简单,我们以 failFast 为例:
结果:
•IResult 方法说明
返回值实现默认为 DefaultResult,接口 IResult 属性如下:
注解说明
java bean 的校验,基于注解是比较方便的。和 hibernate-validator 使用类似,这里介绍下常见的注解。
内置约束注解
内置注解如下:
JSR-303 + hibernate-validator 约束注解支持
条件注解
说明
有时候我们需要根据不同的参数,进行不同的限制条件。
比如新建时用户 id 不需要传入,但是修改时 id 必填。
如果是传统的 hibernate-validator 处理就会比较麻烦,此处引入条件注解。
内置注解
使用
使用起来也不难,下面的效果如下:
1.operType == 'create' 时,name 的校验才会生效。2.operType != 'create' 时,id 的校验才会生效。
其他使用方式保持不变。
过程式接口
说明
日常开发中,我们都很喜欢使用注解对 java bean 进行校验。
但是这回导致我们定义的单个属性校验无法复用。
所以项目中的单个属性校验和注解是一一对应的,为了便于复用。
ValidHelper 方法
ValidHelper 作为统一封装的工具类,提供单个方法校验常见的方法。
和 java bean 类似,方法列表:
使用例子
用法和 bean 的类似,只是入参多了第二个约束条件。
IConstraint 对应关系
注解和常见的接口方法一一对应,所有的约束方法在 工具类中。
条件注解
注解和常见的接口方法一一对应,所有的约束方法在 工具类中。
注解自定义
说明
内置的注解,自然无法满足所有的场景。
本项目中,约束和条件注解都是支持自定义的。
约束注解 @Constraint
所有系统的内置注解都可以作为学习的例子。
定义注解
以 为例,核心的部分在 。
我们在 AtAllEqualsConstraint 中实现具体的约束逻辑。
实现逻辑
推荐直接继承 ,实现对应的逻辑即可。
条件注解 @Condition
所有系统的内置注解都可以作为学习的例子。
定义注解
以 为例,核心的部分在 。
我们在 AtAlwaysTrueCondition 中实现具体的约束逻辑。
实现逻辑
推荐直接继承 ,实现对应的逻辑即可。
开源地址
为了便于大家学习使用,目前校验框架已开源。
validator[3]
References
validator: https://github.com/houbb/validator
变更日志: https://github.com/houbb/validator/blob/master/CHANGELOG.md
validator: https://github.com/houbb/validator
领取专属 10元无门槛券
私享最新 技术干货