Mah*_*leh 14 spring hibernate spring-mvc hibernate-validator
我有一个具有两个验证注释的字段
@NotEmpty
@Length(min=3,max=100)
String firstName;
Run Code Online (Sandbox Code Playgroud)
我只是想知道hibernate如何指定首先执行验证注释的顺序,以及是否可以自定义?
我问的原因是,如果我将该字段留空,有时显示的第一个验证消息是非空的,有时如果我将其留空,则获得长度注释的验证消息.
提前致谢.
Wil*_*leu 19
使用JSR-303验证组.
如果未指定任何组,则约束是Default Bean Validation组的一部分(请参阅:)javax.validation.groups.Default
.
创建一个接口作为"扩展"(或任何你想称之为)的组:
public interface Extended{}
Run Code Online (Sandbox Code Playgroud)
现在创建一个具有javax.validation.GroupSequence
注释的接口.
@GroupSequence({Default.class, Extended.class})
public interface MySequence {}
Run Code Online (Sandbox Code Playgroud)
根据约束设置验证组
@NotEmpty // If no group is specified it is part of the default group
@Length(min=3,max=100, groups = Extended.class)
String firstName;
Run Code Online (Sandbox Code Playgroud)
将MySequence传递给验证者呼叫.
validator.validate(object, MySequence.class);
Run Code Online (Sandbox Code Playgroud)
根据您@GroupSequence
的指定,将首先验证默认约束,如果没有遇到绑定违规,它将转移到扩展组.
Rad*_*ive 12
只是为了补充上面的答案,组序列也可以在已定义验证的类级别完成。例如:
假设我们有两个接口
public interface FirstOrder{}
public interface SecondOrder{}
Run Code Online (Sandbox Code Playgroud)
我们可以将它们定义为一个组序列,如下所示
@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;
}
Run Code Online (Sandbox Code Playgroud)
以这种方式进行组序列的优点是 -
您不需要额外的接口来定义组序列,因此您不需要将其传递给单元/IT 测试的验证器。
归档时间: |
|
查看次数: |
11818 次 |
最近记录: |