美文网首页
IoC容器,Bean校验,Hibernate Validator

IoC容器,Bean校验,Hibernate Validator

作者: 在路上phper | 来源:发表于2018-03-07 16:42 被阅读19次

这节我们学习一下组件的验证,并且结合一些第三方组件进行学习 在我们常见开发中,如果我们传入一个参数,在spring mvc里面,这时候我们会对它进行验证(后面会学习)
接下来做一个简单的实体类
UserEntity用户实体 放在SpringLean.Users包下面(里面有一些字段和数据库字段相同或业务字段相同)
在实体类中可以存入一些业务数据 一般生成getter and setter 比如把用户id和用户名称放进去 然后再我们的业务当中就可以得到并且处理,那么这时候我们无脑的把它传入到方法当中,那我们在获取的时候,如果数据存在不合法或者出现违法字符,就会出现些问题,因此在做业务的时候,需要做些验证。
目录如下

image.png
代码如下
image.png
假设我们要验证实体中的年龄大小 用户名长度 等 我们可以取出属性进行正则表达式 或者字符长度的判断 这种方式效率很低,那么有没有什么通用的验证方法呢?
为了方便理解文档 我们在UserEntity中加入一个toStirng方法 是一个内置方法 对它进行重写 重写之后我们既可以在控制台中打印这个类
新增代码如下
image.png
接下来来到我们的MyTest1文件 由于我们在MySpring里面通过getBean的方法 获取了MyTest1
所以就可以在我们的IoC容器里面进行统一的调用和处理
接下来我们在MyTest1里面写一个测试方法
image.png
然后再UserEntity实体类中写入生成构造函数
image.png
接下来在MySpring中进行调用
image.png
运行结果
image.png
实际上我们要做的就是对以上参数进行验证
所以接下来我们学习一下验证的基本方法,今天暂时了解下套路,在我们以后的spring mvc中经常会用到
接下来我们看文档https://docs.spring.io/spring/docs/5.0.4.RELEASE/spring-framework-reference/core.html#validation
首先spring里面提供了一个Validator 接口
只要实现这个接口,就可以对它进行基本的简单的验证
下面做个最基本的演示
在SpringLean.Users包下面创建一个UserValidator 代表对用户进行验证
目录如下
image.png
根据官网 可知要继承Validator接口 alt+enter导入相关包后代码如下
image.png
这两个方法有什么作用呢?
image.png
supports代表我们当前的验证是否支持该Class的实例 这里我们可以写当前class是否是我们的UserEntity或者是否是继承某个接口,只要该方法返回true 那么validate方法就被执行了。如果出现错误,会把错误信息统一放入Error对象中
接下来看代码
image.png
写完验证代码 我们再次运行下MySpring
image.png
可以发现结果是一样的 我们的验证类没有起到作用
这是因为我们的UserEntity和UserValidator这两个没有任何关系产生
下面根据文档需要使用DataBinder对象,这时一个数据绑定,可以绑定我们的参数到指定对象中,并且可以做些修改,比如我们使用spring mvc时候,一旦得到表单参数,我们对它可以进行参数的绑定和验证
image.png
接着看官网https://docs.spring.io/spring/docs/5.0.4.RELEASE/spring-framework-reference/core.html#validation-beanvalidation
image.png
可以找到这样一段内容
我们在方法里自我创建 创建好之后把相关的类传进去 执行validate方法就可以把当前的validator产生的错误信息得到。
接下来写下代码
在MyTest1中修改下showUser方法
首先将UserValidator打入@Compoment注解 将其变为一个组件 然后再MyTest1中打入@AutoWired自动注入注解
image.png
再次运行MySpring
运行结果
image.png
那我们想看具体是什么原因导致的验证没通过怎么办呢?
需要对错误信息进行循环
接下来写下代码
image.png
运行结果
image.png
还可以直接获取自定义信息
image.png
运行结果
image.png
从结果看出验证貌似有用 在validator里面可以对我们的字段进行一个一个验证
但是会发现一个问题 如果有很多这样的实体类 那么是否需要创建很多个validator对里面的内容一个个进行验证呢?
那样太麻烦了
所以接下来学下下面的内容
image.png
来到官网 可以看见下面一段内容
image.png
JSR-303不是spring特有的,是bean验证的基本规范 实现该规范的有hibernate validator厂商 hibernate也是一个数据层框架
暂时先不学 我们可以在maven中直接使用hibernate 的验证器
来到hibernate验证器官方文档http://hibernate.org/validator/
image.png
通过实例可以看出 只要在类中打入注解就可以对我们的字段进行验证
下面我们加入hibernate validator的maven依赖
在pom.xml中加入
image.png
上面的依赖为hibernate本身的 它需要依赖下面的el表达式类库
接下来做个简单的演示
上面我们写了UserValidator类进行用户字段的验证 下面我们不用它了
如何对UserEntity进行验证呢
首先来到hibernate validator验证官网http://hibernate.org/validator/
来到UserEntity
加入注解
image.png
对age进行验证 打入注解 @NotNull不能为空 和最大值最小值设置
接下来来到MyTest1
注释掉userValidator这句 因为我们不用UserValidator这个类进行验证了 想使用注解的方式
image.png
这时我们运行下MySpring
发现结果又变为
image.png
说明注解没作用
接下来继续看spring文档
spring里面如何对bean进行验证
spring里面有个默认的验证器
image.png
我们用它可以进行bean的注册
写法有两种 1.xml文件2.注解的方式
这节课使用注解的方式演示下
根据文档 来到UserConfig文件
加入如下内容
image.png
然后来到MyTest1
加入自动引用注解 并引用localValidator
image.png
此时将MySpring中调用代码修改下
image.png
运行MySpring
结果
image.png
再次修改调用参数
image.png
运行结果
image.png
以上就是最简单的验证 下节课我们学习下自定义验证规则

相关文章

网友评论

      本文标题:IoC容器,Bean校验,Hibernate Validator

      本文链接:https://www.haomeiwen.com/subject/zvadfftx.html