0

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

  • 必须包含一个值(非空)。
  • 必须正好有 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。

4

1 回答 1

0

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

于 2013-03-18T10:35:25.050 回答