【发布时间】:2021-03-04 03:22:38
【问题描述】:
我正在使用休眠验证。 如果我们将几个组传递给 validate() 验证消息的顺序是随机的。如果两个验证应用于一个字段并且都失败并且这两个验证属于两个不同的组。 有什么方法可以保持验证的顺序吗?
// Bean
public class Register {
@Size(min = 8, max = 50, message = "Minimum should be 5 and maximum should be 10", groups=Second.class)
public String username;
@Size(min = 8, max = 50, message = "Minimum should be 5 and maximum should be 10", groups=Second.class)
@Pattern(regexp = "(?=.*[A-Za-z])(?=.*\\d)[A-Za-z\\d]*", message = "incorrect format", groups=First.class)
public String password;
}
// Validate call
Set<ConstraintViolation<T>> constraintViolations = validator.validate(o, First.class, Second.class);
输入是
用户名“test”,密码“test”
然后所有验证都失败,但对于密码,验证消息的顺序是随机的。我希望 First 组的验证消息总是首先出现。
【问题讨论】:
-
这能回答你的问题吗? Control validation annotations order?
-
@Code_Mode 不,如果我将使用 GroupSequence,那么验证将逐步进行。像第一个一样,如果没有失败,它只会检查第一组,然后检查第二组,这是向导方法。我想一次验证所有内容。
-
听起来您想使用验证组来控制给定字段的消息的显示顺序(例如,对于您的密码字段,模式消息总是首先列出,然后尺寸信息)。这不是验证组的设计目的 - 您可能已经看到
groups值在每个ConstraintViolation对象中不可用。我认为你最好的选择是一个糟糕的选择:运行validator.validate()两次。一次用于First.class,再次用于Second.class。现在您有了控制显示顺序所需的信息。
标签: java hibernate validation