Jodd-vtor验证框架
VTor是一個編程式驗證框架,適用于任意java對象的驗證。它是一個快速、微型的、專注于驗證的框架。也可以通過注解或者手動設置驗證條件。驗證條件也可以在profile中分組。VTor是可擴展的,用戶很容易使用自定義的驗證條件。默認情況下,驗證條件以java編寫,但也很容易擴展它,使用xml或者其它編程語言來定義驗證表達式。
Validation in action
VTor的驗證過程包括:
定義校驗檢查(如應用的驗證條件)。
在目標對象(通常指java bean對象)執行這些規則。
檢查驗證結果。
示例:
ValidationContext vctx = new ValidationContext();vctx.add(new Check("boo", new MinLengthConstraint(2)));上面的代碼片段在VTOR驗證上下文中定義了一個簡單check,這個check定義了boo屬性的最小長度。
現在,驗證一些bean試試:
Vtor vtor = new Vtor();vtor.validate(vctx, fooBeanInstance);驗證已經執行。唯一要做的事情是檢查驗證結果:
List<Violation> vlist = vtor.getViolations();當驗證成功后,返回list是null。反正list包含了一組驗證失敗的沖突。非常簡單,是吧?
Default constraints
VTor包含了很多通用的驗證條件,如:
MaxConstraint,MinConstraint,RangeConstraint--定義了最大、最小范圍的數字值。
LengthConstraint,HasSubstringConstraint,LengthConstraint,WildcardMatchConstraint....---檢查string的值。
EqualToFieldConstraint?--檢查兩個field是否相等。
..............
想要查看完整的驗證條件請查看VTor的javadoc。
VTor annotations
當需要多行驗證時,VTor支持使用注解來簡化使用。下面使用注解來重寫上面的示例:
public class Foo {@MinLength(2)String boo; // getters/setters are optional}現在驗證可以使用很少幾行來完成:
Vtor vtor = new Vtor();vtor.validate(fooInstance);System.out.println(vtor.hasViolations());就是如此簡單。
Profiles
當一個bean不能使用不同set的驗證條件例如rule組進行驗證時,使用注解的問題就爆發了。
例如:例如一個用戶模型對象,在創建和更新用戶時的驗證不同:創建時需要檢查username是否唯一。這個時候就用到VTor的profile。
Profile是一組驗證條件的組合名稱。VTor注解也可以指明Profile組別.
@MinLength(value = 2, profiles = {"p1,p2"})String boo;編程形式如下:
Vtor vtor = new Vtor();vtor.useProfiles("p1", "p2");vtor.validate(fooInstance);特殊的profile名稱:
*(通配符,代表所有的)--用在注釋中,意思是一些驗證條件屬于所有的profile。因此為了不用寫出所有的profile名稱,可以使用這個通配符來替代。
default --作用在默認組的校驗check,例如沒有顯式定義profile名稱的注解。
Excluding profiles
? 有時,需要從一個或者多個profile中排除一個check(由注解驗證條件定義的)。不用寫下除了要排除掉的所有的profile名稱,使用一個減號('-')作為前綴來排除一個profile,如(-p2).
注意:排除profile名具有更高的優先級。
因而,即便一些check屬于一個嚴重級別的profile,若存在一個排除profile,check將不會執行。
Must-have profiles
若存在至少一個匹配的profile,check將會執行。有時,我們需要在所有的profile都有的check才執行,為達成這個目的,只要將加好("+")置于profile名稱前面即可。
Severity
級別時一個簡單的檢驗權值,低于該指定級別的所有check將不會執行。
Profiles summary
// match profiles 'p1' OR 'p2'@FooCheck(profiles = {"p1", "p2"})// match profiles 'default' OR 'p2'@FooCheck(profiles = {"default", "p2"})// match 'p1' OR 'p3' ONLY IF 'p2' does NOT match@FooCheck(profiles = {"p1", "-p2", "p3"})// match profiles 'p1' AND 'p2'@FooCheck(profiles = {"+p1", "+p2"})?
Misc
?增加自定義的violation。
VTor允許用戶增加自定義的violation,而不僅僅是檢驗條件。例如:
vtor.addViolation(new Violation("number", foo, null));這種形式下,甚至是驗證本身都可以在VTor之外執行,然后傳遞結果到框架中。
Use constraints directly
絕大部分的VTor驗證條件可以直接執行,使用驗證類的靜態方法validate().示例如下:
boolean valid = MinLengthConstraint.validate("value", 3);結束!yeah!
?
轉載于:https://www.cnblogs.com/davidwang456/p/4648300.html
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的Jodd-vtor验证框架的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: jodd-servlet工具集锦
- 下一篇: jodd-cache集锦