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