gpt4 book ai didi

java - 使用 GroupSequence 验证嵌套 bean 并一次应用每个组

转载 作者:行者123 更新时间:2023-11-30 07:16:14 26 4
gpt4 key购买 nike

我有几个嵌套类,我想验证它们的自定义约束。但是,我的自定义约束的 validator 要求 Child 类中的字段不为 null,否则它将抛出 NPE。

当我的自定义约束和默认约束都在同一个类上时,我知道我可以使用 GroupSequence 在应用另一组约束之前应用一组约束。

我尝试与嵌套类类似的设置看起来像这样:

@MyConstraint(groups = SecondPass)
@GroupSequence([Parent, SecondPass])
class Parent {
@Valid
Child child
}

class Child {
@NotNull
String cannotBeNull
}

请注意,我的示例代码是用 Groovy 编写的。

对于嵌套类,Hibernate 的 ValidatorImpl 似乎试图首先将所有指定的组应用于 Parent,然后应用于 Child。因此,它会在检查cannotBeNull是否为空之前尝试验证MyConstraint,如果是则抛出NPE。

有没有办法让 validator 首先针对一个组验证(在单个验证调用中)整个对象图,然后再验证 GroupSequence 中后续组中的任何约束?

最佳答案

我认为你的问题是你如何使用 @GroupSequence这里。不幸的是, @GroupSequence 有两种用途。一是定义验证顺序。这是@GroupSequence的时候用于接口(interface),并且该接口(interface)被请求作为对 Validator 的调用的一部分。例如,Validator.validate(bean, MyGroupSequenceInterfaceClass.class) 。在这种情况下,序列将应用于整个对象图。

在您的情况下,您正在使用 @GroupSequence重新定义类的默认序列。在这种情况下,如果 Default组已验证 Parent ,第一个约束 Parent (又名 Default ),然后是 SecondPass 的约束被验证。在这种情况下,仅针对实际 bean 更改默认组顺序。在这种情况下Parent 。它不会沿着对象图传递( @Valid )。 Default组通过 @Valid 传递边界。

关于java - 使用 GroupSequence 验证嵌套 bean 并一次应用每个组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38366112/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com