Spring MVC利用Hibernate Validator實現後端數據校驗(一)

數據校驗:前端

1.前端數據校驗:
使用JS代碼進行的前端數據校驗
可使用前端數據校驗的框架:
Jquer.Validation-xxx.jsjava

2.後端數據校驗
主要使用JAVA代碼進行數據校驗
後端數據校驗是有框架的:Java本身作了一個後端數據校驗的規則——BeanValidation
BeanValidation後端數據校驗規則由Hibernate所在公司實現json

SpringMVC中使用BeanValidation進行後端校驗的,BeanValidation是Java中定義的一種後端數據校驗的規範,這個規範由Hibernate實現。後端

爲何要作數據校驗api

  「用戶的輸入是邪惡的」——能讓用戶動鼠標,決對不要讓用戶使用鍵盤。服務器


SpringMVC中如何作數據校驗
  SpringMVC數據校驗沿用了JavaEE中的BeanValidation,BeanValidation是一個規範——JSR303。
  Java當中只要提到規範內容,其語言實現上就是使用的接口。
  這個BeanValidation由Hibernate實現。
  在此就可使用Hibernate對BeanValidation的實現完成數據校驗。mvc

JSR 30三、JSR 349與Bean Validator
        籠統來講,就是Java規定了一套關於驗證器的API,規範前後發了兩版,就是所謂的JSR 303與JSR 349。而後提出了基於規範的實現:Bean Validator。JSR 303是最先的,其對應了Bean Validator 1.0的版本,比較菜,而後後來擴展了JSR 349,提出了依賴注入、註解等內容,稱爲了Bean Validator。框架

        關於Bean Validator,這並非一項技術,也算是一種規範,須要對其實現。而博文使用的Hibernate Validator就是其中一種。由於Spring MVC自己不提供validator的,因此咱們須要其餘的代替。下面是Wikipedia的一些內容:maven

大概翻譯一下,就是Java Bean的數據驗證(JSR 303),起源於2009今年批准的框架,併成爲Java EE 6的一部分。而hibernate團隊提供了其一種實現。因此Hibernate Validator其實與SSH的那個H:Hibernate,並非其子集。(可能吧,並無接觸過hibernate)。ide

Hibernate Validator
        上面也說過了其由來,這裏簡單說明一下運行過程。JSR 349提出了註解約束,因此通常使用註解了。除去在項目中的配置,咱們能夠在Java Bean中的屬性上使用註解來進行數據約束。在Spring MVC中,利用IoC處理對象的時候就會觸發數據驗證。例如提交表單的時候,dispatcher接收的時候,就會根據約束來斷定數據是否正確。若是有不正確的,就會根據聲明的message,將其添加到Error中,Spring MVC中通常使用BlindingResult對象來獲取,而後就能對錯誤的數據進行處理了。

Hibernate Validator
        上面也說過了其由來,這裏簡單說明一下運行過程。JSR 349提出了註解約束,因此通常使用註解了。除去在項目中的配置,咱們能夠在Java Bean中的屬性上使用註解來進行數據約束。在Spring MVC中,利用IoC處理對象的時候就會觸發數據驗證。例如提交表單的時候,dispatcher接收的時候,就會根據約束來斷定數據是否正確。若是有不正確的,就會根據聲明的message,將其添加到Error中,Spring MVC中通常使用BlindingResult對象來獲取,而後就能對錯誤的數據進行處理了。

操做步驟:

Hibernate的BeanValidation數據校驗須要的包
  hibernate-validator-xxx.jar   (xxx表示版本號)

第一步:下載hibernate-validator-xxx.jar包及相關的jboss-logging-xxx.jar,classmate-xxx.jar

在maven項目的pom.xml中添加:

點擊保存,會有如下四個jar包,依賴關係帶下來的。

 

第二步:配置SpringMVC的BeanValidator

<mvc:annotation-drive/>節點的validator屬性:表示提供一個BeanValidator,而BeanValidator的實現,是使用HibernateValidator。

在SpringMVC中使用LocalValidatorFactoryBean加載驗證明現。

第三步:在要驗證的處理請求的方法的參數上加上註解@Valid,並在使用了@Valid參數後緊跟一個BindingResult接口參數

第四步:判斷BindingResult中的錯誤

 

 

 步驟暫停,咱們來啓動服務先測試一下

啓動服務器以後控制檯輸出一下異常:(若是沒有出現下面的異常,請翻到第五步)

這是由於導入的jar包重複了,那重複的是哪個呢?看下面

在以前我導入了javaee-api,這個jar包裏面也有一個validator,在javaee-api裏面帶有validator-api。

這個時候移除多餘的validator-api的jar包,不能移除javaee-api這個包,移除了你的servlet就沒有了。

 移除方法:

 

點擊保存以後,你就會看到validator-api包沒有了喲

再次重啓服務器運行,這個時候控制檯又輸出一個錯誤:

 

沒有找到javax/validation/ClockProvider,這個時候到javaee-api包下面去找:

確實沒有這個時候怎麼辦呢,又不能再添加一個validator-api,添加就會重複,刪除javaee-api用validator-api的話servlet又不能用了,這個時候就能夠用javaee-api高一點的版本,我這裏用的是7.0的,我把它改爲8.0試試

在pom.xml文件中改版本號,點擊保存等待下載就ok了,下載好了再來看:

 這個時候就有javax/validation/ClockProvider

 又再次啓動服務器,又有異常了。。。。。。

看到ClassNotFoundException就知道缺包了,

JSON對應的依賴包,經常使用有三種json解析jackson、fastjson、gson。

添加如下這三個包:

jackson-core-xxx.jar

jackson-annotations-jar

jackson-Databind-xxx.jar

到這一步,再次重啓服務器,終於沒有異常了,大哭。。。。。。

到如今總共加了六個包進來

第五步:在須要驗證的JavaBean上使用使用驗證註解

第六步:處理校驗結果

 

校驗頁面處理:

小結:

1.BeanValidation:javax中的Bean校驗規範,規範由Hibernate實現
2.提供校驗實例
3.在控制器處理方法的參數上使用@Valid,並在該參數後加上一個BindingResult接口參數
4.驗證Bean中的須要驗證的成員變量上使用驗證註解。

相關文章
相關標籤/搜索