2012-01-30 67 views
1

給出的以下兩個約束JSR303驗證:兩個(或更多)驗證約束:在第一次返回錯誤後,不要評估第二個?

@NotNull 
@Pattern (pattern="foobar") 
private String myFooBarMember; 

是否有一個可能性,如果第一一個匹配(=返回錯誤)(@NotNull)不評估第二個(@Pattern)?或者JSR303總是評估所有約束?如果在第一場比賽之後有可能不對第二場比賽進行評估,請說明如何做到這一點。

非常感謝!

+0

我建議爲此使用'group'參數:當組中的一個約束失敗時,其他將不會被評估。 – 2012-01-30 09:45:53

回答

1

嘛,我不是一個JSR 303專家,但我發現從1.0 FR以下摘錄:

2.3。約束組成

注:

如果一個組成約束失敗,如果由約束 標記爲@ReportAsSingleViolation,Bean驗證提供者 免費不處理這個由 約束的其他構成限制。

和:

3.5。驗證程序

  • 所有到達場,執行所有字段級驗證(包括超表示的)目標 組匹配,除非給出驗證約束已是 了此驗證程序中處理給定導航路徑 (見第3.5.1節)作爲以前組匹配的一部分。

所以從後者,我會說,默認情況下,所有驗證器將被執行。

從前者來說,我會說這個(約束組合)將是實現你想要的一種方法。雖然它可能(也可能是)依賴於Bean Validation實現器,所以您需要閱讀一些專有文檔。

相關問題