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动态链接(4)ldd与ldconfig
    Linux动态链接(3)so文件映射地址
    Linux动态链接(2)so初始化执行
    Linux动态链接(1)惰性链接
    kill信号由谁接收处理
    gdb调试器之"测不准原则"
    gdb动态库延迟断点及线程/进程创建相关事件处理(下)
    gdb动态库延迟断点及线程/进程创建相关事件处理(上)
    Redis集群,备份,哨兵机制
    hyper-v虚拟机centos7网络配置
  • 原文地址:https://www.cnblogs.com/xss512/p/10972683.html
Copyright © 2011-2022 走看看