zoukankan      html  css  js  c++  java
  • 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=三元桥
    结果:
  • 相关阅读:
    反向代理实例
    nginx常用命令和配置
    nginx的安装
    Can Live View boot up images acquired from 64bit OS evidence?
    What is the behavior of lnk files?
    EnCase v7 search hits in compound files?
    How to search compound files
    iOS 8.3 JB ready
    Sunglasses
    现代福尔摩斯
  • 原文地址:https://www.cnblogs.com/bonelee/p/11656467.html
Copyright © 2011-2022 走看看