本工具下载地址:http://git.oschina.net/895925636/mint-validate java
收录地址:http://www.oschina.net/p/mint-validate git
工具包中有4个主要类,他们是Valid, Verifiable, VerificationResult, Verifier。 正则表达式
Valid是注解,做用在bean类的字段上,用来配置验证的参数,一共四个参数: 数据库
Verifiable是抽象类,须要验证的bean类必须继承该类。Verifiable有两个公共方法: 数组
VerificationResult封装验证结果。记录一个验证规则的5个验证信息: ide
Verifier是一个接口,全部自定义验证器都须要实现该接口,而且实现他惟一的方法:public VerificationResult verify(Object bean, Class<?> fieldType, Object fieldValue, String fieldName, String[] params)。verify 方法会被Verifiable 的 validate经过反射调用。该方法5个参数的含义以下: 工具
方法的返回值将参考VerificationResult,返回值会被Verifiable保存,并经过Verifiable的getValidateResult得到。 this
先亮出demo中用到的两个bean,方便起见,不写getter 和 setter。 spa
People继承Verifiable: .net
package test; import mint.validate.Valid; import mint.validate.Verifiable; public class People extends Verifiable{ public int gender; @Valid(rule="notnull") public String address; }
User 继承 People:
package test; import mint.validate.Valid; public class User extends People{ /*采用正则表达式验证(可配置多个正则表达式)*/ @Valid(tipMsg="邮箱地址不正确", pattern={"^[\\w-]+(\\.[\\w-]+)*@[\\w-]+(\\.[\\w-]+)+$"}) public String email; /*简单验证器验证*/ @Valid(rule="notnull") public String username; /*采用验证器验证,并给验证器传递参数*/ @Valid(rule={"LenLimit"}, params={"6", "32"}) public String password; }
正则表达式验证很简单。
只要在字段上作以下配置就行,tipMsg能够不配置,正则能够配置多个:
@Valid(tipMsg="邮箱地址不正确", pattern={"^[\\w-]+(\\.[\\w-]+)*@[\\w-]+(\\.[\\w-]+)+$"}) public String email;
对象中调用validate方法就能够采用配置的正则去验证该字段了。
u.validate("email");
验证器验证的过程会复杂一些。一共分三步:定义验证器、注册验证器、使用验证器。
验证器的定义须要遵循两个约定:
看一个例子:
package verifiers; import mint.validate.ValidateException; import mint.validate.VerificationResult; import mint.validate.Verifier; public class LenLimitVerifier implements Verifier{ @Override public VerificationResult verify(Object bean, Class<?> fieldType, Object fieldValue, String fieldName, String[] params) { if(fieldValue == null) return new VerificationResult(fieldName, "lenlimit", "字段值为空", null, false); if(params.length < 2){ throw new ValidateException("没有指定合适参数"); } int min, max; try{ min = Integer.parseInt(params[0]); max = Integer.parseInt(params[1]); } catch (NumberFormatException e){ e.printStackTrace(); throw new ValidateException("参数格式错误,没法转换成数字"); } int len = ((String)fieldValue).length(); if(len < min){ return new VerificationResult(fieldName, "lenlimit", fieldName+"不能少于"+min+"个字符", fieldValue, false); } if(len > max){ return new VerificationResult(fieldName, "lenlimit", fieldName+"不能多于"+max+"个字符", fieldValue, false); } return null; } }以上一个验证器的名字是LenLimit(使用时不区分大小写),用于验证一个String 字段的长度不能小于6字符并且不能大于32字符。
注册验证器须要在class目录下建立一个properties文件。以下图:
里面只写一个属性packages,属性值是自定义验证器所在的包,多个包用“;”(英文分号)隔开。like this:
packages=verifiers这样验证工具在启动时就会自动去指定的包下扫描自定义验证器了。
这一步跟正则表达式的用法差很少,就在对应的字段上配置验证器:
/*采用验证器验证,并给验证器传递参数*/ @Valid(rule={"LenLimit"}, params={"6", "32"}) public String password;由于LenLimitVerifier是验证长度限制的,因此用params配置两个表示长度限制的参数。
调用验证:
User u = new User(); u.password = "passw"; System.out.println(u.validate("password")); for(VerificationResult r : u.getValidateResult()){ System.out.println(r); }
查看结果:
ps:自定义验证器灵活功能强,能够二维验证,能够结合数据库验证,反正逻辑随你写。
验证父类中的字段。address字段在父类People中:
User u = new User(); u.address = "中国广东"; u.validate("address"); for(VerificationResult r : u.getValidateResult()){ System.out.println(r); }验证全部配置了Valid注解的字段:
User u = new User(); u.email = "895925636#qq.com"; u.password = "passw"; u.address = "中国广东"; /*不写字段名*/ u.validate(); for(VerificationResult r : u.getValidateResult()){ System.out.println(r); }欢迎讨论指正。。。