本工具下載地址: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); }歡迎討論指正。。。