在我们的应用程序中,我们有这样一个案例:
对于前两个,groupsequence 非常适合。但是,对于我的第三个要求,我找不到解决方法。
public class AccountBean {
@CheepValidation
@ExpensiveValidation
@VeryExpensiveValidation
private String name;
@CheepValidation
@ExpensiveValidation
@VeryExpensiveValidation
private String surname
}
例如,
假设,对于姓名字段来说,VeryExpensiveValidationconstraint 被违反,而对于姓氏字段 ExpensiveValidation 约束被违反。
对于这种情况,我应该显示:
对于字段名称:只有非常昂贵的验证错误消息
对于字段姓氏:只有 ExpensiveValidation 错误消息
请注意,对于字段姓氏,我们没有评估非常昂贵的验证约束。
有没有办法用 JSR 303 实现它?
谢谢
最佳答案
您可以使用组和@GroupSequence,但它有点笨拙。
public class AccountBean {
@CheapValidation(groups=Name1.class)
@ExpensiveValidation(groups=Name2.class)
@VeryExpensiveValidation(groups=Name3.class)
String name;
@CheapValidation(groups=Surname1.class)
@ExpensiveValidation(groups=Surname2.class)
@VeryExpensiveValidation(groups=Surname3.class)
String surname;
public interface Name1 {}
public interface Name2 {}
public interface Name3 {}
@GroupSequence({Name1.class, Name2.class, Name3.class})
public interface Name {}
public interface Surname1 {}
public interface Surname2 {}
public interface Surname3 {}
@GroupSequence({Surname1.class, Surname2.class, Surname3.class})
public interface Surname {}
}
然后验证:
validator.validate(myAccountBean,
AccountBean.Name.class, AccountBean.Surname.class)
关键是要有两个完全独立的组序列。
不幸的是,您似乎必须明确列出要验证的所有字段的组。我无法让它与“默认”@GroupSequence 一起工作。任何人都可以改进吗?