如果我在jsr 303中使用两个自定义注释,如果首先验证失败,如何停止第二个注释的验证?

use*_*290 6 java bean-validation

在使用jsr303时我有下一个问题:

我有下一个方式注释字段:

@NotEmpty(message = "Please specify your post code")
@PostCode(message = "Your post code is incorrect")
private String postCode;
Run Code Online (Sandbox Code Playgroud)

但是,只有当字段通过了@NotEmpty的验证时,我才需要检查@PostCode.我如何检查两个注释?提前致谢

Mic*_*Sim 3

您可以使用验证组按组执行验证。详细信息请参见第3.4 节。JSR-303中的组和组序列。在您的示例中,您会执行以下操作:

@NotEmpty(message = "Please specify your post code")
@PostCode(message = "Your post code is incorrect", groups = Extended.class)
private String postCode;
Run Code Online (Sandbox Code Playgroud)

验证时,您将为默认组调用验证,如果没有发生错误,则为该Extended组调用验证。

Validator validator = factory.getValidator();

Set<ConstraintViolation<MyClass>> constraintViolations = validator.validate(myClass, Default.class);

if (constraintViolations.isEmpty()) {
    constraintViolations = validator.validate(myClass, Extended.class);
}
Run Code Online (Sandbox Code Playgroud)

您可以使用验证组做更多事情。

另一种方法是进行所有验证(如果您负担得起),然后手动过滤掉同一字段的多个验证错误。