上节课学习了Hibernate Validator的验证
下面我们来到官网继续学习https://docs.jboss.org/hibernate/stable/validator/reference/en-US/html_single/
看下面这个需求 我们今天使用Hibernate的验证器实现下
![](https://img.haomeiwen.com/i2509361/2d832b02cbea9e24.png)
首先先列举一些Hibernate Validator的常用的注解(网上到处可见)
![](https://img.haomeiwen.com/i2509361/fb5ea152c05bd731.png)
首先在UserEntity中加入用户密码字段 并打入注解
![](https://img.haomeiwen.com/i2509361/76f2c3eed01f6227.png)
然后再MySpring中掉用
![](https://img.haomeiwen.com/i2509361/0b3e8029d3f7707a.png)
运行结果
![](https://img.haomeiwen.com/i2509361/a57f8d1731061c79.png)
因为我们传入的密码为123不符合6-20位 提示出信息
接下来我们在加入一个用户兴趣爱好字段 并验证
![](https://img.haomeiwen.com/i2509361/b0bbc17ed9072c32.png)
接下来来到UserEntity加入兴趣爱好字段 并添加验证注解
![](https://img.haomeiwen.com/i2509361/b90a022fd31c1781.png)
来到MySpring 设置下兴趣爱好值
![](https://img.haomeiwen.com/i2509361/fba413be68e669fa.png)
运行结果
![](https://img.haomeiwen.com/i2509361/9a9f0bedc41f261f.png)
因为我们没有填兴趣爱好 所以提示出相应的信息
接下来修改下兴趣爱好数组值
![](https://img.haomeiwen.com/i2509361/13d754eaf00bc2c4.png)
运行结果
![](https://img.haomeiwen.com/i2509361/9b47c3956b157df4.png)
可以发现验证是通过了 但是如果想对兴趣爱好值进行进一步控制怎么办?
接下来进一步修改下需求 想要设置兴趣爱好最少为1个最多为10个 并且兴趣爱好名称为至少2个字最多10个字
下面用代码演示下
在UserEntity中加入
![](https://img.haomeiwen.com/i2509361/d8258224c9b04368.png)
在字段的前面加入字符长度限制注解
在MySpring中调用
![](https://img.haomeiwen.com/i2509361/c05d787adb76b64d.png)
运行结果
![](https://img.haomeiwen.com/i2509361/004cf99e487e099f.png)
由于传入字符长度为1 所以提示出验证信息
验证更多的用法参考上面放出的官方地址
接下来学习下自定义的验证 有的时候老外带的验证不能符合我们的验证规则,需要自己自定义验证规则
![](https://img.haomeiwen.com/i2509361/a85fc9f36c5ad9bd.png)
下面我们模拟个需求
比如用户名在注册的时候不能有违禁字符
默认不予许字符串中拥有“bhcbhc”这个词汇
如果设置了违禁词汇,用逗号分离
下面我们用代码演示下
之前学注解时候我们写了一个自定义的注解NameCheck 那么这个注解如何和我们的验证有关联呢?
有几个属性是必须的
第一个是message
比如说一旦出错,出现异常 需要显示什么内容
接下来看下NameCheck注解
![](https://img.haomeiwen.com/i2509361/47b2884e2c53d565.png)
可以看见新增的必须得三个属性
上面创建了注解 那么如何对注解进行解析呢
接下来在MyAnnos包下面创建一个NameCheckClass文件
目录如下
![](https://img.haomeiwen.com/i2509361/0c484540e4a33a82.png)
那么如何把注解和我们创建的类文件关联呢?
需要在我们的自定义注解里面打入@Constraint注解 可以ctrl+鼠标左键进入源码 看见validatedBy方法
表示由哪个类进行验证
自定义NameCheck注解中加入如下
![](https://img.haomeiwen.com/i2509361/6d3ccfca465d0161.png)
可以发现有波浪线标红了 编译器告诉我们这个类文件需要继承ConstraintValidator接口
所以我们来到NameCheckClass文件 继承该接口 alt+enter 实现其中的两个方法 NameCheckClass中波浪线消失了
![](https://img.haomeiwen.com/i2509361/f18e039b95bd7159.png)
NameCheckClass文件变为如下
![](https://img.haomeiwen.com/i2509361/8d2efb4660fd726b.png)
我们在else处 需要编写判断代码
这里需要判断一下 NameCheck注解里面有个forbidden里面有个默认的值bhcbhc 如果有别的值 可以在打注解的时候编写
所以来到UserEntity
在userName字段上 打入自定义注解
![](https://img.haomeiwen.com/i2509361/ea939fb35bd0d77a.png)
那么这个自定义字段值如何获取呢?
在NameCheckClass文件中初始化方法里的constraintAnnotation对象可以获取到
![](https://img.haomeiwen.com/i2509361/dd4dc1f266284650.png)
因此我们定义一个变量
![](https://img.haomeiwen.com/i2509361/32cbfa485c69c221.png)
下面进行else部分逻辑判断
NameCheckClass代码如下
![](https://img.haomeiwen.com/i2509361/8202f0eb7f9af858.png)
接下来就可以运行MySpring了
MySpring代码如下
![](https://img.haomeiwen.com/i2509361/109e8f1fc2b9d480.png)
运行结果
![](https://img.haomeiwen.com/i2509361/bcd3c1990404cd6c.png)
出现了有违禁词汇 因为我们的username设置为了bhcbhc
接下来我们把UserEntity中自定义注解加上message信息 修改下默认的message
![](https://img.haomeiwen.com/i2509361/05723bf6f7729b40.png)
运行MySpring
![](https://img.haomeiwen.com/i2509361/13754f474af9d91f.png)
接下来注释掉username值在MySpring中
![](https://img.haomeiwen.com/i2509361/9c43f0561bbd1549.png)
在UserEntity中注释掉username的@NoTNull注解
![](https://img.haomeiwen.com/i2509361/945d1640da358357.png)
运行结果
![](https://img.haomeiwen.com/i2509361/c47e2f82f63ae9aa.png)
可以发现如果没有设置username 我们默认是认为合法的
因为我们CheckUserName没有对null值进行处理 因为有@Notnull注解进行判断
所以一般我们要加上@NotNull注解 省去自己判断
再次在UserEntity中的username处加入@NotNull注解
![](https://img.haomeiwen.com/i2509361/73048b296c624b7e.png)
运行MySpring
![](https://img.haomeiwen.com/i2509361/55ea8fc9cbeb6adf.png)
因为我们没有对username进行设置值
以上就是最简单的自定义验证
网友评论