數據校驗:前端
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中的須要驗證的成員變量上使用驗證註解。