zoukankan      html  css  js  c++  java
  • Spring MVC利用Hibernate Validator实现后端数据校验(一)

    数据校验:

    1.前端数据校验:
    使用JS代码进行的前端数据校验
    可以使用前端数据校验的框架:
    Jquer.Validation-xxx.js

    2.后端数据校验
    主要使用JAVA代码进行数据校验
    后端数据校验是有框架的:Java自己做了一个后端数据校验的规则——BeanValidation
    BeanValidation后端数据校验规则由Hibernate所在公司实现

    SpringMVC中使用BeanValidation进行后端校验的,BeanValidation是Java中定义的一种后端数据校验的规范,这个规范由Hibernate实现。

    为什么要做数据校验

      “用户的输入是邪恶的”——能让用户动鼠标,决对不要让用户使用键盘。


    SpringMVC中如何做数据校验
      SpringMVC数据校验沿用了JavaEE中的BeanValidation,BeanValidation是一个规范——JSR303。
      Java当中只要提到规范内容,其语言实现上就是使用的接口。
      这个BeanValidation由Hibernate实现。
      在此就可以使用Hibernate对BeanValidation的实现完成数据校验。

    JSR 303、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的一些内容:

    大概翻译一下,就是Java Bean的数据验证(JSR 303),起源于2009今年批准的框架,并成为Java EE 6的一部分。而hibernate团队提供了其一种实现。所以Hibernate Validator其实与SSH的那个H:Hibernate,并不是其子集。(可能吧,并没有接触过hibernate)。

    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中的需要验证的成员变量上使用验证注解。

  • 相关阅读:
    linux 短信收发
    sama5d3 环境检测 adc测试
    【Codeforces 723C】Polycarp at the Radio 贪心
    【Codeforces 723B】Text Document Analysis 模拟
    【USACO 2.2】Preface Numbering (找规律)
    【Codeforces 722C】Destroying Array (数据结构、set)
    【USACO 2.1】Hamming Codes
    【USACO 2.1】Healthy Holsteins
    【USACO 2.1】Sorting A Three-Valued Sequence
    【USACO 2.1】Ordered Fractions
  • 原文地址:https://www.cnblogs.com/xss512/p/10972683.html
Copyright © 2011-2022 走看看