Jodd-vtor驗證框架

VTor是一個編程式驗證框架,適用於任意java對象的驗證。它是一個快速、微型的、專一於驗證的框架。也能夠經過註解或者手動設置驗證條件。驗證條件也能夠在profile中分組。VTor是可擴展的,用戶很容易使用自定義的驗證條件。默認狀況下,驗證條件以java編寫,但也很容易擴展它,使用xml或者其它編程語言來定義驗證表達式。java

Jodd-vtor驗證框架

Validation in action

VTor的驗證過程包括:編程

  定義校驗檢查(如應用的驗證條件)。框架

  在目標對象(一般指java bean對象)執行這些規則。編程語言

  檢查驗證結果。ide

示例:code

ValidationContext vctx = new ValidationContext();
 vctx.add(new Check("boo", new
 MinLengthConstraint(2)));

上面的代碼片斷在VTOR驗證上下文中定義了一個簡單check,這個check定義了boo屬性的最小長度。xml

如今,驗證一些bean試試:對象

Vtor vtor = new Vtor();
 vtor.validate(vctx, fooBeanInstance);

驗證已經執行。惟一要作的事情是檢查驗證結果:blog

List<Violation> vlist = vtor.getViolations();

當驗證成功後,返回list是null。反正list包含了一組驗證失敗的衝突。很是簡單,是吧?get

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!

相關文章
相關標籤/搜索