控制验证批注的顺序?
问题内容:
我有一个带有两个验证批注的字段
@NotEmpty
@Length(min=3,max=100)
String firstName;
我只是想知道hibernate是如何指定要首先执行哪个验证注释的顺序的,以及是否可以自定义?
我要问的原因是,如果我将该字段留空,则有时显示的第一条验证消息表示不为空,而其他时候如果我将该字段留空,则会得到长度注释的验证消息。
提前致谢。
问题答案:
使用JSR-303验证组。
如果未指定任何组,则约束是“默认Bean验证”组的一部分(请参阅:)javax.validation.groups.Default
。
创建一个接口作为您的“扩展”(或任何您想称呼它的)组:
public interface Extended{}
现在创建一个具有javax.validation.GroupSequence
注释的接口。
@GroupSequence({Default.class, Extended.class})
public interface MySequence {}
根据您的约束设置验证组
@NotEmpty // If no group is specified it is part of the default group
@Length(min=3,max=100, groups = Extended.class)
String firstName;
将MySequence传递给您的验证程序调用。
validator.validate(object, MySequence.class);
根据您@GroupSequence
的指定,将首先验证默认约束,如果没有遇到违反冲突的情况,它将进入扩展组。