SpringMVC使用@Valid注解进行数据验证

 

我们在做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=三元桥
结果:

SpringMVC使用@Valid注解进行数据验证的更多相关文章

  1. SpringMVC数据验证

    SpringMVC数据验证——第七章 注解式控制器的数据验证.类型转换及格式化——跟着开涛学SpringMVC 资源来自:http://jinnianshilongnian.iteye.com/blo ...

  2. spring(7)--注解式控制器的数据验证、类型转换及格式化

    7.1.简介 在编写可视化界面项目时,我们通常需要对数据进行类型转换.验证及格式化. 一.在Spring3之前,我们使用如下架构进行类型转换.验证及格式化: 流程: ①:类型转换:首先调用Proper ...

  3. SpringMVC配置数据验证(JSR-303)

    这篇文章已经过时了. 请参考比较合适的前后端交互方式. 1.pom.xml中追加hibernate-validator 2.在dto类的域上追加JSR-303的注解 public class Data ...

  4. Spring MVC 使用介绍(十三)数据验证 (一)基本介绍

    一.消息处理功能 Spring提供MessageSource接口用于提供消息处理功能: public interface MessageSource { String getMessage(Strin ...

  5. 06springMVC数据验证

    u  声明式数据验证 u  内置的验证约束和注解 u  错误消息 u  功能处理方法上多个验证参数的处理 u  异常处理的支持 1      声明式数据验证 Spring3开始支持JSR-303验证框 ...

  6. springMVC数据验证出现404错误解决办法

    今天使用springMVC的数据验证的时候,看似很简单的东西,却有一个很大的陷阱:提交空表单的时候总是出现404错误,但是后台却不给你报任何错.遇到这个错误这个很苦恼,搞了几小时,今天记录并分享一下解 ...

  7. SpringMVC数据验证(AOP处理Errors和方法验证)

    什么是JSR303? JSR 303 – Bean Validation 是一个数据验证的规范,2009 年 11 月确定最终方案. Hibernate Validator 是 Bean Valida ...

  8. SpringMVC学习笔记六:使用 hibernate-validator注解式数据校验

    对客户端传过来的参数,在使用前一般需要进行校验. SpringMVC框架内置了Validator验证接口,但是实现起来太麻烦.我们一般使用 hibernate-validator进行数据校验. 1:j ...

  9. SpringMVC(6)数据验证

    在系列SpringMVC(4)数据绑定-1.SpringMVC(5)数据绑定-2中我们展示了如何绑定数据,绑定完数据之后如何确保我们得到的数据的正确性?这就是我们本篇要说的内容 -> 数据验证. ...

随机推荐

  1. c# 自定义按钮,渐变颜色(含中心向四周渐变,单方向渐变)

    废话不多言,直接代码: public class RoundButton : Button { bool clickBool = false; //1.设置圆形 //2.设置渐变色 //3.设置too ...

  2. CentOS7安装Kubernetes1.16.3

    一.概述 手工搭建 Kubernetes 集群是一件很繁琐的事情,为了简化这些操作,就产生了很多安装配置工具,如 Kubeadm ,Kubespray,RKE 等组件,我最终选择了官方的 Kubead ...

  3. 客观->感官->意识->语言->思维->世界观、科学->思想

    客观->感官->意识->语言->思维->世界观.科学->思想

  4. IP地址和MAC地址绑定的必要性

    计算机网络是一个共通的网络,世界上任何计算机都可以互相访问. 实现的原理基于网络通讯的互联网交互五层模型. 计算机网络的历史发展 当计算机网络技术初始利用的时代,几台计算机通过集线器连接,就可以实现网 ...

  5. C语言----输入输出语句(基础篇二)

    今天整理一下自己的基础篇输入和输出的理解,自己没有研究系统输入和输出函数,以后有时间在去深究,之前在别人的博客里面看到这么一句话分享给大家,“学习就是一个不断抄袭,模仿,练习和创新的一个过程”. 使用 ...

  6. kubernetes(k8s) Prometheus+grafana监控告警安装部署

    主机数据收集 主机数据的采集是集群监控的基础:外部模块收集各个主机采集到的数据分析就能对整个集群完成监控和告警等功能.一般主机数据采集和对外提供数据使用cAdvisor 和node-exporter等 ...

  7. 创建和使用CI / CD管道【译】【原】

    在GitLab 8.8中引入. 介绍 管道是持续集成,交付和部署的顶级组件. 管道包括: 定义要运行的作业的作业.例如,代码编译或测试运行. 定义何时以及如何运行的阶段.例如,该测试仅在代码编译后运行 ...

  8. vs2017添加引用提示“找不到 Microsoft.VisualStudio.Shell.Interop.IVsReferenceManager 服务的实例”解决方案

    vs2017添加引用提示“找不到 Microsoft.VisualStudio.Shell.Interop.IVsReferenceManager 服务的实例” 不知道是不是安装时候的问题?解决方法: ...

  9. windows下vmware和Hyper-v共存方法

    问题描述:环境:windows server 2012 r2系统下安装Hyper-v后,再安装Vmware 在Vmware中创建虚拟机,安装虚拟机系统的时候,vmware提示:VMware Works ...

  10. MAC OS系统替换brew.npm, pip 使用阿里云的镜像源

    替换brew.git:cd "$(brew --repo)"git remote set-url origin https://mirrors.aliyun.com/homebre ...