SpringMVC使用@Valid注解進行數據驗證
我們在做Form表單提交的時候,只在前端做數據校驗是不夠安全的,所以有時候我們需要在后端同樣做數據的校驗。好在SpringMVC在后台驗證給我們提供了一個比較好的支持。那就是使用Valid接口的實現類做數據校驗。在這之前我們先做一下准備的工作。
添加相關的Maven依賴
我們先把需要的jar包添加進來。
-
<dependency>
-
<groupId>javax.validation</groupId>
-
<artifactId>validation-api</artifactId>
-
<version>1.1.0.Final</version>
-
</dependency>
-
<dependency>
-
<groupId>org.apache.bval</groupId>
-
<artifactId>bval-jsr303</artifactId>
-
<version>0.5</version>
-
</dependency>
實現Validator接口
接下來的第一 步我們需要寫一個類來實現Validator接口。在這個類里我們需要定義它支持校驗的JavaBean,實現validate方法,用來進行相關的校驗。具體的實現類如下:
-
package com.zkn.learnspringmvc.validtor;
-
-
import com.zkn.learnspringmvc.scope.PersonScope;
-
import org.springframework.util.StringUtils;
-
import org.springframework.validation.Errors;
-
import org.springframework.validation.ValidationUtils;
-
import org.springframework.validation.Validator;
-
-
/**
-
* Created by wb-zhangkenan on 2016/9/2.
-
*/
-
public class PersonalValidtor implements Validator{
-
-
/**
-
* 判斷支持的JavaBean類型
-
* @param aClass
-
* @return
-
*/
-
-
public boolean supports(Class<?> aClass) {
-
return PersonScope.class.equals(aClass);
-
}
-
-
/**
-
* 實現Validator中的validate接口
-
* @param obj
-
* @param errors
-
*/
-
-
public void validate(Object obj, Errors errors) {
-
//把校驗信息注冊到Error的實現類里
-
ValidationUtils.rejectIfEmpty(errors, "name",null,"姓名不能為空!");
-
PersonScope personScope = (PersonScope) obj;
-
if(StringUtils.isEmpty(personScope.getAddress())){
-
errors.rejectValue( "address",null,"家庭地址不能為空!!!!");
-
}
-
}
-
}
使用Validtor的校驗實現類
我們需要在Controller的類里使用剛才寫的Validtor的校驗實現類來進行表單數據的校驗。我們需要在Controller里用@InitBinder注解把剛才的校驗類綁定到WebDataBinder類里。寫法如下:
-
//綁定PersonalValidator
-
-
public void initBinder(WebDataBinder webDataBinder){
-
webDataBinder.addValidators( new PersonalValidtor());
-
}
-
-
-
//直接返回對象
-
public Object testPersonalValidtor(@Valid PersonScope personScope, BindingResult bindingResult){
-
if(bindingResult.hasErrors()){
-
StringBuffer sb = new StringBuffer();
-
for(ObjectError objectError : bindingResult.getAllErrors()){
-
sb.append(((FieldError)objectError).getField() + " : ").append(objectError.getDefaultMessage());
-
}
-
return sb.toString();
-
} else{
-
return personScope;
-
}
-
}
請求:http://localhost:8081/testPersonalValidtor.do
結果:

請求:http://localhost:8081/testPersonalValidtor.do?name=張三&address=三元橋
結果:
