2015-04-07 34 views
6

我有多個進程,其中bean屬性必須具有不同的值。例如:Java Bean驗證:如何指定相同類型但具有不同組的多個驗證約束?

@Min(value=0, groups=ProcessA.class) 
@Min(value=20, groups=ProcessB.class) 
private int temperature; 

不幸的是,Bean驗證JSR 303並沒有設置@Repeatable 上javax.validation.constraints.Min所以這種方法是行不通的。 我找到了「Min.List」,但沒有任何有關如何使用它的文檔。相反,在http://docs.oracle.com/javaee/7/api/javax/validation/constraints/class-use/Min.List.html

javax.validation.constraints.Min.List

沒有使用Oracle官方文檔狀態,以便在此刻這看起來像一個規範的錯誤?!?

+0

文檔還表示「定義相同的元件在幾個最小注釋。」。所以它看起來完全像你想做的事情。你嘗試過使用它嗎?有什麼困難? –

+0

javac拋出一個編譯錯誤:不可重複類型@ Min的重複註釋。只有標記@Repeatable的註釋類型可以在一個目標上多次使用。 –

+0

這就是您在使用'@ Min'兩次時所說的內容,就像您發佈的代碼一樣。這就是爲什麼您應該使用'@ Min.List',它被記錄爲「在同一元素上定義幾個Min註釋」。當你使用'@ Min.List'時會發生什麼? –

回答

7

的語法Min.List,作爲用於任何其他註釋服用註釋的陣列作爲其屬性之一,是

@Min.List({ @Min(value = 0, groups = ProcessA.class), 
      @Min(value = 20, groups = ProcessB.class) }) 
+0

謝謝。而已。任何想法爲什麼這比僅僅多次分鐘更好?至少會降低可讀性。 –

+1

自Java 8以來註釋是可重複的。Bean驗證是在Java 5或6上設計的。所以這種可能性不存在,因此Min.List的解決方法。如果現在設計了Bean Validation,Min.List可能不存在。 –

+0

好點。謝謝。我將使這個增強請求進行bean驗證。 –

相關問題