Spring 按逻辑顺序进行JSR-303验证
我的域模型类验证约束中有这样的字段:Spring 按逻辑顺序进行JSR-303验证,spring,validation,bean-validation,Spring,Validation,Bean Validation,我的域模型类验证约束中有这样的字段: @Column(nullable = false, name = "name") @NotEmpty(groups = {Envelope.Insert.class, Envelope.Update.class}) @Size(min = 3, max = 32) private String name; 当此字段为空(“”)或null时,验证程序将生成“不能为空”和“大小必须介于…”两条错误消息。我理解这一点,但当我向客户机显示这
@Column(nullable = false, name = "name")
@NotEmpty(groups = {Envelope.Insert.class, Envelope.Update.class})
@Size(min = 3, max = 32)
private String name;
当此字段为空(“”)或null时,验证程序将生成“不能为空”和“大小必须介于…”两条错误消息。我理解这一点,但当我向客户机显示这个验证错误时,它看起来很奇怪(因为当某个值为null/空时,它无法满足大小要求,这是不符合逻辑的)
有没有办法告诉Spring按正确的顺序进行验证?如果不是@NotEmpty
,则不要检查@Size
,当满足@NotEmpty
时,根据
默认情况下,约束不会按特定顺序求值,并且
不管他们属于哪个群体。在某些情况下,
但是,控制约束的顺序很有用
评价为了执行这样一个命令,我们将定义一个新的
接口并用@GroupSequence对其进行注释,以定义中的顺序
必须验证哪些组
首先,创建两个接口FirstOrder.class和SecondOrder.class,然后使用@GroupSequence
注释在OrderedChecks.java中定义一个组序列
public interface FirstOrder {
}
public interface SecondOrder {
}
@GroupSequence({FirstOrder.class, SecondOrder.class})
public interface OrderedChecks {
}
最后,在bean约束注释中添加组
@Column(nullable = false, name = "name")
@NotEmpty(groups = {FirstOrder.class, Envelope.Insert.class, Envelope.Update.class})
@Size(min = 3, max = 32, groups=SecondOrder.class)
private String name;
以下示例取自 然后像这样调用验证器
validator.validate(address, Minimal.class, Total.class);
validator.validate(address, Minimal.class, Total.class);