我正在使用bean验证规范在spring-boot百万美元项目中验证我的表单。 我的实体财产如下。
@NotEmpty(message = "{Password should not be empty}")
@Pattern(regexp = //Pattern for range 1-20, message = "{Wrong Input}")
private String password;
当我运行并输入具有空值的表单的密码字段时,显示了两个验证错误消息。
我的期望是,虽然输入空值,但只有@NotEmpty注释可以工作,另一方面,只有在用户输入错误时才会显示@Pattern。
如何处理Bean验证规范呢?
问候。
答案 0 :(得分:4)
@NotEmpty(groups = First.class), message = ...,
@Pattern(groups = Second.class, regexp = ...)
private String password;
创建验证组:
//Validation Groups - Just empty interface used as Group identifier
public interface First {
}
public interface Second {
}
以这种方式验证模型:
Validator validator = Validation.buildDefaultValidatorFactory().getValidator();
Set<ConstraintViolation<Model>> violations = validator.validate(model, First.class);
if(violations.isEmpty()){
violations = validator.validate(model, Second.class);
}
我从未使用它们,但它似乎只是你想要的
检查另一个答案(https://stackoverflow.com/a/7779681/641627)。我在这个答案(来自 @Gunnar )下面添加了一个引用,具有讽刺意味的是,它还使用了第一个和第二个组名:< / p>
@GroupSequence({First.class, Second.class}) public interface Sequence {} @Size(min = 2, max = 10, message = "Name length improper", groups = { First.class }) @Pattern(regexp = "T.*", message = "Name doesn't start with T" , groups = { Second.class }) private String name;
现在使用定义的序列验证Bean实例 (validator.validate(bean,Sequence.class)),首先是@Size 约束将被验证,并且只有在@Pattern成功时才会被验证 约束
使用此解决方案,您不需要手动调用validator.validate(...),如果失败,将按照序列中定义的顺序执行验证。