JSR-303类型的java字段验证总是/隐式地在字段验证之前运行



如果我使用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之后求值?我知道我可以用分组来这样做,但如果没有必要,我宁愿不这样做(即字段验证被隐式分组,以便在对象验证之前进行验证)。

根据规范,第3.5节:

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

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

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

  • 执行所有类级别的验证(包括那些在接口和超类中表示)匹配目标组除非已经处理了给定的验证约束在给定导航路径的验证例程期间(请参阅

  • 所有可达的和级联关联,执行所有级联验证(参见章节3.5.1),包括在接口和超类(参见3.4.5节)

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

最新更新