2016-10-03 48 views
0

我已經構建了Spring REST服務(Spring 4.0和Java 8),並且我有Employee REST服務,其中Employee類具有以下屬性 名稱,年齡,性別,薪水,指定,company_id ,holiday_entitlement,manager_name & country。Spring 4.0中的動態驗證

我期待編寫使用Spring 4.0驗證層,確認需要根據員工

驗證預期

  1. 員工姓名,年齡,性別的國家是動態國家是強制性的。

  2. 員工性愛是男性或女性

  3. 員工的年齡不能超過70歲,而不是更小的18歲。

  4. 例如 如果國家是英國,休假權不能大於25天 如果國家是美國,休假權不能大於20余天 如果國家是西班牙,休假權不能大於30天

  5. 同樣,如果國家是英國,那麼它可以接受來自英國的預定名單指定名稱,對於其他國家也採用類似的名稱。

  6. 如果提供了manager_name,那麼我需要驗證他是否與員工屬於同一公司id。所以我將不得不查找一些DAO來獲取經理的公司ID。

問題

A.鑑於上述驗證要求,我想知道是否有任何春特定類別,將允許動態驗證基於這樣的國家。

B.什麼時候將調用驗證,立即發佈我的JSON在Spring中或在服務層(類註釋@Service)中被轉換爲Java對象。

C.我仍然應該在我的員工POJO中使用Spring bean驗證JSR 303註釋,或者驗證是否應該在不同的類中執行esp,以確定哪些屬性是必需的?

回答

1

答:據我所知在Spring中沒有特殊的驗證層,因此使用javax.validation,其中Hibernate是參考實現。真正容易實現的是方法驗證,作爲一個例子,你可以看看https://github.com/flexguse/validation-violation-checker-demo。B:您可以使用@Valid方法註釋直接在Controller方法中執行JSR303驗證,但我更願意在您的服務方法中進行驗證,以便更好地控制在驗證錯誤情況下響應的內容 - >看到https://spring.io/blog/2013/11/01/exception-handling-in-spring-mvc

C:JSR 303個註解應該是不夠的,你需要創建自己的驗證註釋和驗證實現你應該添加到Employee POJO - >見https://softwarecave.org/2014/03/27/custom-bean-validation-constraints/

不要忘了寫JUnit測試你的驗證!

0

我不認爲有一個特殊的驗證層響應您的需求100%,但例如,在Spring MVC中,我們有一個驗證器接口org.springFramework.validation.Validator

它給你提供了動態定義規則的可能性,使用validate方法驗證數據,並通過在控制器中創建一個活頁夾和@Valid來調用它。