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

发布于 2024-12-10 10:54:15 字数 548 浏览 0 评论 0原文

如果我使用 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;
    }
}

并且我验证了它,是否保证仅在 @Min@Max 之后评估 @DummyClassValidation ?我知道我可以使用分组来做到这一点,但如果不需要的话我宁愿不这样做(即字段验证隐式分组以在对象验证之前进行验证)。

If I am using the javax.validation.Validator to validate an object annotated with constraints, will it always evaluate the field level constraints before the object?

For example if I have:

@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;
    }
}

And I validate it, is it guaranteed that the @DummyClassValidation will be evaluated only after @Min and @Max? I know I can do so with Groupings but I rather not if I don't have to (i.e. Field validations are implicitly grouped to validate before object validations).

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

以歌曲疗慰 2024-12-17 10:54:15

根据规范第 3.5 节:

对于要验证的给定组,验证例程应用于
给定的 bean 实例预计执行以下约束
验证(无特定顺序):

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

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

  • 执行所有类级别验证(包括
    在接口和超类上表达)与目标群体相匹配
    除非给定的验证约束已经被处理
    在给定导航路径的验证例程中(参见
    第 3.5.1 节)作为之前小组比赛的一部分。

  • 对于所有可达的
    和级联关联,执行所有级联验证(请参阅
    第 3.5.1 节)包括接口上表达的内容和
    超类(参见第 3.4.5 节)

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

Per the specification, section 3.5:

For a given group to validate, the validation routine applied on a
given bean instance is expected to execute the following constraint
validations in no particular order:

  • for all reachable fields,
    execute all field level validations (including the ones expressed on
    superclasses) matching the targeted group unless the given validation
    constraint has already been processed during this validation routine
    for a given navigation path (see Section 3.5.1) as part of a previous
    group match.

  • for all reachable getters, execute all getter level
    validations (including the ones expressed on interfaces and
    superclasses) matching the targeted group unless the given validation
    constraint has already been processed during this validation routine
    for a given navigation path (see Section 3.5.1) as part of a previous
    group match.

  • execute all class level validations (including the ones
    expressed on interfaces and superclasses) matching the targeted group
    unless the given validation constraint has already been processed
    during this validation routine for a given navigation path (see
    Section 3.5.1) as part of a previous group match.

  • for all reachable
    and cascadable associations, execute all cascading validations (see
    Section 3.5.1) including the ones expressed on interfaces and
    superclasses (see Section 3.4.5)

In short, you can't rely on that unless you want to find an implementation that guarantees it and stick with that.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文