JEE6教程(http://docs.oracle.com/javaee/6/tutorial/doc/gircz.html)建議JSR-303/Bean驗證應該用於驗證輸入 - 至少這是我對它的解釋。儘管如此,一些Bean Validation註解(例如@NotNull)在界面驗證級別上可能不是有用的,而是在預先持久化級別上不是有用的。我應該依賴數據庫進行Hibernate屬性驗證嗎?
例如,請考慮下面的實體:
public class Registry {
@NotNull
String userName;
@NotNull
Date createdAt;
}
在這種情況下,有哪個用戶名是由用戶自己填寫的表單。但我不希望用戶知道這個註冊表的創建日期。我希望我的後端將其設置爲服務器的當前日期。
所以,我通常會將此對象綁定到頁面上的表單,並使用@Valid來執行JSR-303驗證。但事情是:我沒有通過Bean Validation驗證「createdAt」,我希望只有在實體將被Hibernate持久化時才能驗證它。但是,通過Bean驗證,這兩個屬性都通過表單請求進行驗證。
如何解決這個問題? JSR-303應該在這種情況下工作嗎?我應該依賴數據庫可空字段驗證「createdAt」屬性嗎?
這個職位幾乎是同一個問題,但我還沒有找到任何答案有兩種:Validation where to organize in web app for more efficient way
酷!我會嘗試的!謝謝! – felipecao