JavaEE6中提供了基於java Annotation(注解)的Bean校驗框架,Hibernate也有類似的基於Annotation的數據校驗功能,我在工作中,產品也經常需要使 用數據校驗,為了方便和重用,自己寫了一個簡單的基於Annotation的校驗框架。有興趣的可以擴展。
框架說明:
AnnotationValidable接口:所有需要使用該校驗框架的類都要實現它,該類中沒有任何方法需要實現,僅僅是一個表明那些類需要使用該校驗框架的標識。
GetFiledValue類:是一個工具類,對外提供一個靜態方法public static Object getField(AnnotationValidable filter, String field)用於獲得指定類對象的指定屬性值。
Handler接口:是所有校驗處理的接口。
ValidateException類:是校驗框架中任何異常均被封裝成該異常對象向上拋出。
該校驗框架所提供的校驗注解有:
@ValidateDigit:校驗是否是數字。
@ValidateInt:校驗整型數據,可以指定最大值或最小值。
@ValidateNotEmpty:校驗集合對象中不能為空。
@ValidateNotLaterThan:校驗一個時間或日期不能比另一個時間或日期晚。
@ValidateNotNull:校驗對象不能為NULL。
@ValidatePattern:針對字符串的高級校驗,可以指定字符串的正則表達式。
@ValidateSize:校驗字符串的長度,可以指定最長長度或最短長度。
@ValidateStringIn:校驗字符串中包含指定的字符(串),多個字符(串)用“,”分隔。
所有以上的注解都有一個message屬性用於指定校驗出差時異常信息內容,都有默認值,可以指定也可以不用指定。
這些注解里面的一些其他參數用法請參考UT中的測試用例。
以上所有的注解都有一個對應的Handler用於處理該注解,這些handler都實現Handler接口。
這些Handler具體負責每個對應的注解的校驗,如果校驗失敗則拋出ValidateException異常。
校驗框架最核心的是Validator,這個類是一個單態模式,使用時只需要調用其public void validate(AnnotationValidable validatedObj)方法,把需要校驗的實現了AnnotationValidable接口的對象當作參數傳進去就可以了。
Validator的工作原理是:
1.獲得校驗對象后,掃描該對象中是否存在自定義的校驗注解,存在就去調用相應的注解處理類(對應的handler)進行校驗。
2.校驗對象校驗結束后,遞歸校驗其父類,直到AnnotationValidable接口為止。
優點:
1.使用方便,重用性高。
2.可以根據需求進行定制化開發。
3.適合后台的數據校驗。
不足:
1.對應java Annotation不熟悉的人可能不太好上手。
2.有重復造輪子之嫌。
3.功能有限,目前只實現了在字段上注解的校驗,尚未實現對get方法和類作用域注解的支持。