控制验证批注的顺序?


问题内容

我有一个带有两个验证批注的字段

@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的指定,将首先验证默认约束,如果没有遇到违反冲突的情况,它将进入扩展组。