分类
Java

[原创]JAVA通用属性验证工具

在程序开发中,少不了属性的效验。最常用的应该是 hibernate 的 validator 或 apache 的 commons-validator 。

这两种框架各有优缺点,首先是 Hibernate的validator,它臃肿了,依赖很多其他jar包。在不使用hibernate框架时使用它还是很不方便的。其次是apache的commons-validator,虽然很灵活,但是配置麻烦,好像没有基于注解的。这两个框架都不适合移动端。所以自己写了一个轻量的验证工具。

下载地址:zz-validator
本着开源的精神,项目已上传到github上了。为保证代码最新,推荐在github上下载。
地址:https://github.com/wangzhengzhen/fast-validator
没来得及补文档,所以在代码中注释尽量详细,下面也简单说明一下使用方法:

1.目录节构和类说明

如图:
20160420100416
其中最主要的是 这个类。

类中主要关注以下几个方法:

void register(Class anno, IValidator validator)

这个方法用于注册自定义验证器。
比如自带验证器中,没有验证性别字段的,这时可以自己创建一个注解和解析注解的类,解析注解类必段继承接口。在工程中test目录下有样例。

IValidator checkAll(Object obj)

验证类中所有属性,如果返回为null,说明验证成功,如果有错,则返回IValidator对象。

IValidator checkForGroupId(Object obj, Integer groupId)

验证类中指定组的属性。
针对不同场景验证不同属性,如果返回为null,说明验证成功,如果有错,则返回IValidator对象。比如用户登录和注册,信息都会封状在一个用户信息类中。可能登录有验证码,注册没有。注册需要验证性别、年龄之类的,但登录不需要。所以可以根据不同场景设置不同组,验证时指定组即可。

2.自定义验证器

通过 Validator 中 register 方法不仅可以替代原有注解验证规则,也可以自定义注解并验证。在工程中已有示例代码:
20160420101505
如图:
20160420101611
这里主要自定义了一个验证性别的注解。

自定义注解必须指定以下字段,因为注解本身不能继承,所以在自定义注解时需要自己添加进去。
int id() default -1;
这个用来标识注解在一个类中唯一性,暂时没有使用,未来可以会以它来排序,控制验证顺序。
int[] groupId() default -1;
注解所属组ID。在一个类中,组ID必需唯一。
int failureDescResId() default -1;
这个是Android专用的,如果验证失败,返回资源引用ID,这样可以找到 string.xml 中注明的错误描述,可以做到国际化。
String failureCode() default “”;
验证失败后的错误码。
String failureDesc() default “”;
验证失败后的错误描述。与failureDecsResId可以任意选用。

3.小结

之所以引入id和组id,是考虑到android中的混淆。之前控制验证字段是使用的字段名,但在android中使用了混淆,字段名就会发生变化,反射技术就不再适用。
这个验证器工具还有很多可以加强的地方,比如增加缓存,解析过的类不必再次扫描类中的注解。比如控制验证的顺序等。
代码已传到github,有兴趣的人可以和我一起完善它,加强它。后续我也会把一些自己写的比较好的框架分享出来。

发表评论

电子邮件地址不会被公开。