0
在命令bean中有一个类型为String
的字段,必须按照以下顺序进行验证。Group JSR 303中的评估顺序和顺序
- 必须包含一个值(非空)。
- 必须正好有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。
你是否需要在Spring控制器类中有条件地检查 - 只检查特定的组,当其他组的约束满足时(即它们返回true)?我这样做根本不需要。您是如何在控制器(或映射到请求的其他操作类)中编码的?请告诉我。 – Tiny 2013-03-19 01:47:53
除了组序列之外,当其中一个约束失败时,它们都不应被评估。这可能吗? – Tiny 2013-03-19 01:55:26
您可以使用Hibernate Validator特定的[fail fast mode](失败快速模式)(http://docs.jboss.org/hibernate/stable/validator/reference/en-US/html_single/#d0e3331),它会在第一次违反约束后停止验证内容时发生。 – Gunnar 2013-03-20 22:14:13