一个字段有两个验证注释
@NotEmpty
@Length(min=3,max=100)
String firstName;
如果该字段留空,则所产生的违规行为按顺序变化:
@NotEmpty
首先被违反@Length
Hibernate如何指定处理验证(注释)的顺序? 这个验证顺序可以定制吗?
提前致谢。
如果未指定组,则约束是默认 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
的指定,将首先验证默认约束,如果没有遇到约束违规,它将移至扩展组。
假设我们有两个接口
public interface FirstOrder{}
public interface SecondOrder{}
我们可以将它们定义为一个组序列,如下所示
@GroupSequence({MyTestClass.class,FirstOrder.class,SecondOrder.class})
public class MyTestClass{
@NotBlank(groups = FirstOrder.class)
@Length(min=3, max=100, groups = SecondOrder.class)
private String name;
}
以这种方式进行分组顺序的优点是 -您不需要额外的接口来定义组顺序,因此您不需要将其传递给验证器进行单元/IT 测试。