SpringMVC使用@Valid注解進行數據驗證


SpringMVC使用@Valid注解進行數據驗證

from: https://blog.csdn.net/zknxx/article/details/52426771

我們在做Form表單提交的時候,只在前端做數據校驗是不夠安全的,所以有時候我們需要在后端同樣做數據的校驗。好在SpringMVC在后台驗證給我們提供了一個比較好的支持。那就是使用Valid接口的實現類做數據校驗。在這之前我們先做一下准備的工作。

添加相關的Maven依賴

我們先把需要的jar包添加進來。
  1.  
    <dependency>
  2.  
    <groupId>javax.validation</groupId>
  3.  
    <artifactId>validation-api</artifactId>
  4.  
    <version>1.1.0.Final</version>
  5.  
    </dependency>
  6.  
    <dependency>
  7.  
    <groupId>org.apache.bval</groupId>
  8.  
    <artifactId>bval-jsr303</artifactId>
  9.  
    <version>0.5</version>
  10.  
    </dependency>

實現Validator接口

接下來的第一 步我們需要寫一個類來實現Validator接口。在這個類里我們需要定義它支持校驗的JavaBean,實現validate方法,用來進行相關的校驗。具體的實現類如下:
  1.  
    package com.zkn.learnspringmvc.validtor;
  2.  
     
  3.  
    import com.zkn.learnspringmvc.scope.PersonScope;
  4.  
    import org.springframework.util.StringUtils;
  5.  
    import org.springframework.validation.Errors;
  6.  
    import org.springframework.validation.ValidationUtils;
  7.  
    import org.springframework.validation.Validator;
  8.  
     
  9.  
    /**
  10.  
    * Created by wb-zhangkenan on 2016/9/2.
  11.  
    */
  12.  
    public class PersonalValidtor implements Validator{
  13.  
     
  14.  
    /**
  15.  
    * 判斷支持的JavaBean類型
  16.  
    * @param aClass
  17.  
    * @return
  18.  
    */
  19.  
    @Override
  20.  
    public boolean supports(Class<?> aClass) {
  21.  
    return PersonScope.class.equals(aClass);
  22.  
    }
  23.  
     
  24.  
    /**
  25.  
    * 實現Validator中的validate接口
  26.  
    * @param obj
  27.  
    * @param errors
  28.  
    */
  29.  
    @Override
  30.  
    public void validate(Object obj, Errors errors) {
  31.  
    //把校驗信息注冊到Error的實現類里
  32.  
    ValidationUtils.rejectIfEmpty(errors, "name",null,"姓名不能為空!");
  33.  
    PersonScope personScope = (PersonScope) obj;
  34.  
    if(StringUtils.isEmpty(personScope.getAddress())){
  35.  
    errors.rejectValue( "address",null,"家庭地址不能為空!!!!");
  36.  
    }
  37.  
    }
  38.  
    }

使用Validtor的校驗實現類

我們需要在Controller的類里使用剛才寫的Validtor的校驗實現類來進行表單數據的校驗。我們需要在Controller里用@InitBinder注解把剛才的校驗類綁定到WebDataBinder類里。寫法如下:
  1.  
    //綁定PersonalValidator
  2.  
    @InitBinder
  3.  
    public void initBinder(WebDataBinder webDataBinder){
  4.  
    webDataBinder.addValidators( new PersonalValidtor());
  5.  
    }
接下來我們需要在@RequestMapping這個注解所在的方法上使用@Valid注解進行數據的校驗。
  1.  
    @RequestMapping(value = "testPersonalValidtor.do")
  2.  
    @ResponseBody
  3.  
    //直接返回對象
  4.  
    public Object testPersonalValidtor(@Valid PersonScope personScope, BindingResult bindingResult){
  5.  
    if(bindingResult.hasErrors()){
  6.  
    StringBuffer sb = new StringBuffer();
  7.  
    for(ObjectError objectError : bindingResult.getAllErrors()){
  8.  
    sb.append(((FieldError)objectError).getField() + " : ").append(objectError.getDefaultMessage());
  9.  
    }
  10.  
    return sb.toString();
  11.  
    } else{
  12.  
    return personScope;
  13.  
    }
  14.  
    }
接下來我們來看一下效果:
請求:http://localhost:8081/testPersonalValidtor.do
結果:
請求:http://localhost:8081/testPersonalValidtor.do?name=張三&address=三元橋
結果:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM