JSR 303中的GroupSequence和评估顺序

时间:2013-03-17 03:18:21

标签: spring validation bean-validation hibernate-validator

我在命令bean中有一个类型为String的字段,必须按以下顺序进行验证。

  • 必须包含值(非空)。
  • 必须有6个字符。
  • 必须确认此正则表达式 - [0-9, a-f, A-F]+

如果违反任何一项,则不得执行其余任务。我尝试使用@GroupSequence实现此目的,如下所示。

@GroupSequence({TempBean.ValidationGroupNotEmpty.class, TempBean.ValidationGroupColourHexLength.class, TempBean.ValidationGroup.class, TempBean.class})
public final class TempBean
{
    @NotEmpty(groups={ValidationGroupNotEmpty.class}, message="Must enter a valid colour code.")
    @Length(min=6, max=6, groups={ValidationGroupColourHexLength.class}, message="Requires exactly 6 characters.")
    @Pattern(groups={ValidationGroup.class}, regexp="[0-9, a-f, A-F]+", message="Invalid colour code.")
    private String stringValue;

    public interface ValidationGroup{}
    public interface ValidationGroupNotEmpty{}
    public interface ValidationGroupColourHexLength{}

    // Getters and setters.
}

当文本字段有意留空时,仅执行@NotEmpty但是当我输入违反@Length@Pattern约束的值时,我同时获得了指定的消息意味着它们都被评估。这不应该发生。其中只有一个应按定义的顺序执行。怎么办呢?

我正在使用Spring 3.2.0和Hibernate Validator 4.3.1。

1 个答案:

答案 0 :(得分:0)

你的代码看起来很好,我甚至对HV 4.3.1进行了测试。它按预期工作。您正在评估默认组吗?你试过调试吗?