• 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!

  • 相关阅读:
    Oracle11g聚合函数
    和为S的连续正数数列,动态规划,C++
    统计一个数组在排序数组中出现的次数,C++,二分查找
    寻找两个链表的第一个公共子节点,C++
    二维数组中的查找
    数组中的逆序对,C++,分治算法
    得到从小到大的第N个丑数的三种方式(C++)一维动态规划
    连续字数组的最大和(Java)一个int数组,求其中的最大的连续数的和
    n个整数,求这中间最小的k个整数(Java)
    两个字符串的最长公共子串求法(C++、动态规划)
  • 原文地址:https://www.cnblogs.com/davidwang456/p/4648300.html
Copyright © 2020-2023  润新知