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);