00:01
各位同学大家好,前面呢咱们已经完成了spring里边的资源操作,包括国际化,那下面呢,给大家来讲解词里边的另外一部分叫validation,就是它的数据校验。那首先呢,我们从几个方面,咱们先说一下,我们要讲哪些内容,咱们看一下啊,第一部分我们会把spring validation做一个介绍,然后咱们通过以下的几种方式,包括实现接口,注解方式,基于方法以及自定义实现校验几个方面咱们来详细演示validation,那第一部分呢,我们先做一个总体的概述。说一下这个va相关特点。各位同学应该知道啊,我们开发中呢,经常遇到一些校验的需求,什么叫校验需求?举个例子啊,比如说现在我们做用户登录,或者说用户注册,那再要保证我们的用户名或者密码,是不是肯定不能为空,必须有值,另外呢,比如说咱们输入手机号,保证手机号的格式是不是满足咱们规范的格式,你不能随便写,而这些就叫校验,而这个校验呢,如果咱用普通方式,那咱肯定是把我们的校验代码跟真正的业务代码混到一起来编写,这是最简单实现,但是这么写呢,虽然能实现功能,会造成你的耦合度过高,也就是说我要改这个校验,那需要改很多地方,也要涉及到我的业务代码,所以实际中我们经常肯定不建议这么来做,这个时候呢,就出现一个叫validation validation就能这个问题,它可以把我们的校验跟业务分离出来,降低耦合。
01:45
To让代码编写更加简单。现在讲的就是spring validation这个数据校验。这是一个总体的说明,然后这个怎么来做呢?大家看啊,我们这里边给大家演示四种方式,咱们先看一下啊,第一种方式呢,怎么做呢?我们写个类实现,这个接口叫valid,通过它我们最终实现校验,然后第二种方式叫按照B的validation进行,也就是基于注解视线,第三种方式基于方法进行视线,其实它也是注解方式,然后最后一个,如果说里边的功能不能满足咱的需求,咱们可以自定义校验规则进行实现,这是我们要演示的四种方式。
02:29
那下面呢,我们先看一种方式,通过实现valid接口进行实现,咱们把它做演示。那下面我们来操作一下啊。首先第一部分呢,咱们在这项目中先建一个子模块,那我在里边进行创建vali。我们进行创建,这是我们的第一部分,然后创建之后我们用第一种方式来实现校验,怎么实现,给各位先做个分析,然后咱们开始进行实现。
03:01
我在这个图里边给大家写一下它的基本步骤。首先第一步操作,咱们先引入依赖,引入什么依赖呢?我们来看一下啊,因为我们现在用的spring validation,它本身是对time valid做了一个封装,所以需要引入冠依赖,这是第一部分。然后这个之后我们里边的第二步操作,咱们创建实体类定义属性。然后创建它对应的set和get方法,这就是我们的第二部分,然后这个之后我们的第三步给大家写一下啊,第三步呢,我们创建一个类,让这个类实现这个valid这个接口,然后实现接口里边的方法,咱们来编写咱这个校验的逻辑,比如说你判断不能为空,比如说你的年龄不能大于100,年龄不能小于零等等,这是第三步。
04:02
然后这个之后继续来看啊,我们的最后一步,那就是在里边我们最终进行这个测试,然后用里边的方法,最终完成这个校验的测试过程,就是第四步就是完成最终的测试。这个啊是咱们一个基本的步骤,那我下面按照这个步骤咱们进行实现,基于这个valid接口,我们完成这个校验的过程,那在下面来写一下啊,这个步骤我们来看一下,第一步呢,咱们先引入依赖,我就在6VA中直接把依赖咱们拿过来,就是这两依赖咱给它直接做个复制。这个啊,拿过来。依赖应用之后,我们进入到第二部分,第二部分呢,我在里边咱们创建一个包,那我在里边做过创建。com.AT6加上这个valid。
05:06
然后加上一个,因为咱是第一种方式,我在里边进行,然后后面有to,包括有string,包括其他方式,然后里边我创建一个类,这个类呢,我起个名字,比如叫这个person,然后在person里边我加上,比如咱就加上两个属性啊,但是你可以加更多,我就以两个为例,第一个属性名称,然后第二个属性加上一个,这个int age,就是年龄生成它的get和set方法。把这个我们都生出来,所以现在加了一个实体类,这是我们的第二部分,然后这个之后进入到我们的第三步,第三步呢,咱们写个类那里这个vali。然后让他实现这个valid这个接口。
06:04
就是这个接口啊,咱们把它拿过来,让它进行一个实现,然后实现之后我们需要实现里边那个具体的方法,咱们把方法做实现。呃,应该不是这个啊,应该咱导错包了啊,我们看一下啊,这个包应该导的不对。咱们看啊,这个va我们导应该是里这个vali刚才应该导了别的里边的导错了啊,注意这个不要导错,然后之后实现里边的方法,它里边有两个方法,一个方法叫suppose,一个方法叫valid,那咱们自介绍先说这个suppose,这方法什么意思,我们做个说明,大家看我的课件里边啊,这里写到它表示你用来就是此校验要用在哪个类型上,对哪个类型进行校验,就是我们具体的一个校验的逻辑,比如我判断不能为空。判断长度等等在里边编写,这是两个方法,然后咱们看第一个啊,就这个色suppose方法,我在里边写一下,因为它反是一个布尔类型,咱就对这个person做这个校验,那我写上啊,就来一个person.class点上equal加上这个啊类是第一个就对校验,然后第二个在里加上咱们这个校验规则。
07:32
校验规则我在里边写一下啊,我们看怎么来做,首先第一个,比如说我第一个呢,咱这么来做就是判断我的name,它的值不能为空,然后第二个呢,咱判断A,比如说我约定啊,这个A值呢,肯定它就是不能小于零。你不能有小于零的零岁啊,肯定没有这个年龄,另外比如他不能大于这个,就是比如说。
08:01
100啊,比如大于这个200岁,因为人嘛,不可能活到200岁,最多能活到100多一点岁,算是很大很大的啊,所以咱们就写这么一个值,这时候我们写的一个校验啊,然后咱们看怎么来做,首先说第一个咱们用一个工具类写一下啊,这工具类叫validation,就是它里边有一个方法,这方法咱们找一下这个。If empty。通过它判断飞空。这个我们写的方法,方法写完之后在里边加上相关的参数,第一个加上里面这个adol啊,表示为空,肯定出现错误,As把这个加上,加上之后我们看啊,第二部分呢,加什么呢?加你的属性名称,就是你对哪个属性做这个校验,咱们的属性是name,然后第三个加什么呢?注意啊,加上叫I code,就是你那个错误的编码,那我写一个啊,比如说我叫name.empty。
09:04
这个可以随便写啊,然后最后一个加什么呢?加上这么一个内容,就是你现在如果说为空,你有一个默认的提示信息,比如我提示说这个name值意思那啊,咱做个提示信息,以上是我们写的这个部分,里边就传入这么一个参数啊,咱们再重复一遍啊,然后咱再往下来做。我们再重复一遍啊,把这个格式先稍微调整一下,那我们来看啊,首先我们的做法就是写一个类实现接口,然后里边support,里边表示对哪个类型校验,但是person,然后里边加上规则,咱做的第一个name不能为空。我们用工具类中的方法,然后判断,如果它为空,这是irows这个参数,这是属性,这是那个错误编码,最后一个是默认的错误提示信息,比如咱们提示name is呢,这是我们完成的第一部分,然后第二部分呢,咱们判断age这个新闻内容,那咱看怎么做啊,大家看我这位置是不是有一个object,就是咱们传过来这个对象,那这个对象呢,它默认是object类型,咱为了操作方便转成咱的person类型,为了咱们进行这个操作。
10:21
Person这个叫。Target啊,就是它了啊,咱们转成,然后这个之后呢,在这里边我们做一个判断。我写一下啊,就是如果说。p.get它的年龄小于零,那咱们是不是就肯定是这个数据有问题了,有问题的话,我们用irows里边有一个方法,这方法叫value,然后加上你的属性。再加上什么呢?刚才一样,就是咱那个错误的那个编码,比如这编码我就叫这个a.Y6啊,点这个就是比如说就来一个这个。
11:06
呃。挨着吧,就来它了啊,就是A的Y,比如它就是出现了问题,然后咱们加上它,包括里边可以再加个参数,这参数就是它的默认信息,比如咱们提示说这个A指它。小于零啊,这是我们写到的,然后之后我们继续来写,再来个else if,我们继续进行判断。那怎么判断?用p.get h,如果这个值大于这个200,表示肯定也出错,跟上面写法一样,irows.reject value,加上你的这个属性,然后加上我们的编码啊,这编码,比如我叫这个,呃,再看上面啊,上面叫HY6。这个比如我叫一个age value,来一个叫old啊,我得跟它区分,然后后面加上它的默认提示信息,比如说这个age大于200。
12:05
所以大家看啊,现在咱就把这个校验的这个规则就完成了,Name不能等于空A小于零大于200都是错误的,这个数据,这个我们就写到这里,所以咱这步就做到了,做到之后呢,那最后我们就开始进行最终的测试啊,咱就测试一下啊,我在里边呢,建个测试类,咱来试一下。加上啊叫test person。在里边加上main方法,然后在main方法中咱们完成最终的这个校验的测试。那怎么测试呢?给大家写一下步骤啊,第一步我们先创建person对象,然后对象创建之后,第二部分就是创建你这个person,它一个对应的一个对象,这对象叫这个date band,就是它那个数据绑定,我写一下啊,就是这个date band。
13:07
数据绑定,然后之后呢,我们设立一下,刚才咱创建这个就是校验器,就是刚才我们这个类啊,把这个做个设置,然后之后我们调用方法执行校验,最终输出我们这个就是校验的结果,就是你是成功啊还是失败还是怎么样,这是一个基本过程,那咱们来测试一下啊,首先我先new个对象,就是建一个person对象啊,咱先new一个。然后咱们后面再测试,比如说A那种效果,现在这么写应该没有值,Name等于空,然后第二个创建person对应的这个对象,我写一下啊,叫这个date。Band。咱们叫这个band,等于new上一个date band传入对象,这是第二部分,然后第三部分向这个band里边设置我们这个校验器。
14:05
验器呢,就刚才咱那个类啊,我直接一下valid,这是第三步,然后下一步调方法进行执行,调这个valid date方法,我们进行执行,最后输入它的结果,用band里边这个方法叫get band result,得到它这个最终的结果啊,这个结果比如叫。然后通过result咱们做个输出了,这个输出中呢,有很多内容,咱就直接把这个输出了,就这个OS,就所有的信息啊都给它输出一下,通过它我们应该能看到更完整。所以现在这个过程我们就写完了。通过这个valid接口完成了校验,这单就到这里,我们再重复一遍啊,然后最终我们进行测试,咱们看我们怎么做的啊,第一部分建立一个模块6VALID,然后在里边引入了依赖。
15:04
引入依赖之后,我们建立一个实体类。两个属性name age,生成了方法之后,我们建立一个类,实现了Y接口,第一个指定类型,第二个校验规则,咱们校验了这么一部分内不能为空,然后下一部分H小于零和大于二版都会出错,最终完成这个测试是咱们写到这个部分。所以现在啊,这个就完成,完成之后我们把它做个测试,试一下这个效果,咱们看它会怎么样啊,我们来做个测试。等他执行咱试一下啊。然后大家看你看啊,这里边是不是有内容的输出啊,当然咱输入是完整信息,咱看一下输出什么,肯定他目前是有问题了,什么问题告诉我们,就是现在说你的name啊,咱往后看啊,咱看的完整点。大家看这里啊,这个应该记得name意思,那是咱们刚才那个错误那个默认的提示信息,是不是就是它表示当前内值等于空,然后这里边有你个状态码,就这个内点M体啊,咱说那错误状态码里边有这个值就是。
16:17
I code,所以现在证明这个校验就可以了,那咱们可以再试一下啊,我现在person等于空,那我向person里边,比如说我设置一个啊,咱就来一个这个Lucy,然后设置它之后我再设置一个age。这个A值呢,咱这么来做,比如现在我写一个A值是负一,大家看负一的话,它是不是我们这个规则会生效,因为那A值不能小于零,咱写负一,那咱们看啊,现在它会怎么样,我们也是执行一下,试一下效果。然后大家看啊,提示我们A出错了,这值是负一,然后提示是A小于零,证明生效,咱再试一个啊,比如来一个这个250,肯定是大于200,因为人嘛,不可能活到250岁啊,咱就来一个值,肯定是咱这个规则会生效。
17:12
然后大家看,还是这个age。看这里边。A是不是大于了200,所以证明啊,咱们就完成这个校验。通过valid接口进行了实现,也就是咱们演示validation中的一种方式,通过实现接口完成数据的校验,这个咱们叫演示到这里。
我来说两句