[英]How does spring MVC do form validation (using hibernate)
我正在關注一個教程,該教程向我們展示了如何使用Spring MVC
框架構建可以驗證的簡單表單。
我們創建了一個使用RequestMapping
進行注釋的函數,然后在該函數的第一個參數的@ModelAttribute
注釋旁邊添加了@Valid
作為注釋。 我們將第一個參數類型稱為ClassA
。
現在,在ClassA
,我們標注的一些屬性與hibernate
驗證注釋(例如@NotNull
, @Pattern
,等...)
我想了解的是這一切如何運作?
例如,我檢查了@interface NotNull
的代碼,但實際上沒有任何作用。
我假設spring MVC
框架使用反射來檢測使用Valid
來注釋RequestMapping
函數的第一個參數,然后在提交表單時調用SOMETHING
來驗證ClassA
屬性。
這SOMETHING
在哪里? 它處於休眠狀態嗎? 請編寫代碼... Spring
如何找出要調用hibernate
代碼的,我們只是將hibernate
jars
添加到了項目中,但是我們絲毫沒有告訴Spring
使用它們。
另外,將Spring MVC
綁定到休眠的規范是什么?
有人能用簡單的術語並使用高級的代碼(如果可能的話使用代碼引用)向我解釋事情的運行方式嗎?
我對此很陌生,來自C ++,那里的工作方式截然不同。 我試圖了解Spring
運作背后的機制。
您將看到Spring對JSR-303 Bean驗證API的支持。 這些注釋,比如@NotNull
, @Pattern
此JSR的一部分。 由於這只是一個JSR(基本上,JSR只是一組接口),因此它需要一個具體的實現才能真正起作用(稱為提供者)。 這是圖片中出現休眠的地方。 Hibernate擁有JSR-303的實現,稱為hibernate-validator
。 該API與Hibernate的核心ORM功能無關。 實際上,此API是JSR-303的參考實現 ,這就是為什么在文檔中您會看到它被用作默認提供程序的原因。
因此,作為Spring框架的用戶,您需要知道的是Spring需要在類路徑中找到JSR-303的實現,以便您可以開始使用javax.validation.*
包中的那些注釋。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.