JSR-303类型的java字段验证是否始终/隐式运行在字段之前?

时间:2011-10-17 22:47:44

标签: java validation object field bean-validation

如果我使用javax.validation.Validator来验证带有约束的对象,它是否总是会在对象之前评估字段级约束?

例如,如果我有:

@DummyClassValidation
public static class DummyClassToValidate {

    private Integer myNum;

    @Min(value = 50)
    @Max(value = 100)
    public Integer getMyNum() {
        return myNum;
    }

    public void setMyNum(Integer myNum) {
        this.myNum = myNum;
    }
}

我验证了它,是否可以确保@DummyClassValidation仅在@Min@Max之后进行评估?我知道我可以使用Groupings这样做,但我不愿意,如果我没有必要(即,在对象验证之前隐式地对字段验证进行分组以进行验证)。

1 个答案:

答案 0 :(得分:2)

the specification,第3.5节:

  

对于要验证的给定组,验证例程应用于   给定的bean实例应该执行以下约束   验证没有特别的顺序:

     
      
  • 对于所有可到达的字段,   执行所有字段级验证(包括表示的那些)   超类)匹配目标组,除非给定验证   在此验证例程期间已经处理了约束   对于给定的导航路径(参见第3.5.1节)作为前一部分的一部分   小组赛。

  •   
  • 对于所有可到达的getter,执行所有getter级别   验证(包括在接口和表达式上表示的验证)   超类)匹配目标组,除非给定验证   在此验证例程期间已经处理了约束   对于给定的导航路径(参见第3.5.1节)作为前一部分的一部分   小组赛。

  •   
  • 执行所有类级别验证(包括那些验证)   在接口和超类上表示)匹配目标组   除非已经处理了给定的验证约束   在给定导航路径的验证例程期间(请参阅   第3.5.1节)作为前一组比赛的一部分。

  •   
  • 所有可到达的   和cascadable关联,执行所有级联验证(参见   第3.5.1节)包括在接口和表达式上表达的那些   超类(参见第3.4.5节)

  •   

简而言之,除非你想找到一个能够保证并坚持下去的实现,否则你不能依赖它。