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!

相关文章
相关标签/搜索