00:00
各位同学大家好,刚才呢,咱们完成了swag的整合,进行了接口测试,那下面呢,我们继续往下学习,下面咱们做什么呢?我们来实现一个叫做统一返回结果。那首先我解释一下什么叫统一反应结果,给各位同学来做一个说明,我们来看一下。各位注意啊,我刚才呢写了两个接口,第一个接口是一个列表接口,第二个是不是一个删除接口,咱们看这个删除接口大家看啊,我这里返回到是不是布尔类型啊,如果成功咱们存是true,如果失败是不是叫fo,当然各位注意啊,我们在实际开发中,各位应该同学都能想到,咱们不可能是一个人做个项目。实际中呢,肯定是很多人共同来做项目,那这个时候有个问题了,比如说啊,我习惯true代表成功,Force代表失败,比如现在换了另外一个人,他可能习惯零代表成功,一代表失败,比如说咱们现在又换了一个成员,他可能习惯200代表成功,比如说201代表失败。所以大家发现啊,每个人的习惯都不一样。
01:17
那这个时候呢,咱在写前端的时候就特别不方便了,因为前端你要这么写的话,因为每个人习惯都不一样,那前端要根据我们不同人做不同的这种判断,做不同的解析,另外各位注意啊,咱们列表反应的是一个Jason的数度格式,然后我这个反的是一个true和false,它里边格式又不一样,那这时候前端在解析反应数据的时候,它要写不同的代码。所以咱们针对这个问题就要做个处理,怎么处理呢?我写一下啊,我们实际中一个原则,要让我们所有的接口都返回相同格式的数据,就是不管你是什么操作,你是添加也好,修改也好,删除也好,都返回相同格式数据,比咱约定里边的OK代表成功,然后别的代表失败,那咱前端可以做统一的判断,所以这是我们一个总的一个原则。
02:19
我再重复一遍啊,我们的原则就是让所有接口都返回相同格式数据,当然这个数据肯定是一个Jason格式数据,不管你是添加也好,修改也好,删除也好,列表也好,都返回同样格式数据,这是咱的原则,所以下面咱就需要做这个事情,让咱接口开发更加规范,另外利于前端的这个信息。那这个怎么做呢?各位看一下我的课件中,我这里写到,首先呢,我下面举了几个例子,比如各位看第一个啊,是一个简单的列表数据,各位看这数据首先扣的200。
03:00
成功date中是你的数据。比如说你看这个分页种,它data中就多了一个records数据,还有你的这个total总记录数,或者说你的当前页等值,而这个数据有什么特点呢?大家观察,各位看。Code的是不是都是200,那我在前端我就可以判断,当code的值是200,那我从date中来取到它的数据,做一个统一的这么一个格式的处理,这是有返回结果的,比如咱再看下面两个数据,如果说你现在比如你做一个添加,做个修改,做个删除,那这个时候呢,它并没有反应结果,是不是只反应成功,失败,那同样根据扣做判断,扣200成功扣的不是200表示失败,失败和成功咱在前端再做不同处理。所以以上是咱们写的这么一个示例的结构,一会儿咱就把我们所有接口都返回同样的这个格式,在实际的开发中,一般接口中都要做这个事情,让接口开发更加规范,所有接口都返回相同个人数据。
04:12
这个我们做了一个说明,那这个怎么做,下面呢,咱就具体来写一下这个代码,我们来做个实现。然后怎么实现,我说明啊,因为咱要返回统一的一个结果,所以咱们根据统一结果先创建一个实体类,里边加上对应的属性,最终我们再进行返回,那下面我就来建个实体类,咱们做统一的结果返回。那我们看怎么做,给各位写一下啊。各位注意,因为咱们现在只是写了D模块,后面肯定还有很多模块,所以咱把这部分就写到我们的还是common中的U里边,为了所有模块中都能用到,那我来写一下啊,首先在里边我先建个包。
05:02
咱们来做个创建。然后这个包我就叫这个。Result做个创建在包里边,咱们来创建一个类,这个类我起个名字就叫做。Result把这个做创建,所以咱们统一返回结果的这么一个类,我加个注释。统一返回结构类,然后类创建之后怎么做呢?在里边咱给它创建这么几个属性。那我写一下啊,比如第一个我来一个咱们。加上一个叫扣的,代表咱那个返回那个状态嘛,就是咱们刚才看到的,比如说咱约定2万成功,或者说200成功,不是200就是失败,这也代表状态码,然后里边还有第二个就是这个信息message,那我再写第二个。我写一个private词缀。
06:01
加上。Message。表示咱那个返回的那个状态的信息,就是你是成功还是失败。这是第二个,然后除了这个之外呢,里边还有第三个,大家看这里是不是有date呀,Date中是不是你的具体数据啊,当然这个数据呢,可能有不同的格式,比如说你看啊,我们可以是这种格式。就是一个对象,或者说有速度,然后从里边有嵌套不同类型,所以咱为了这个写法通用,我们采用这种泛型类的方式进行编写,然后写一下啊,首先在蕊造这类上边,咱们定一个类型,类型起个名字,我就叫做TT,就代表另一类型,然后下面我们做一个定义。写上private t,起个名字就叫date,代表咱们那个最终返回那个数据,比如你做列表,那date就是列表的数据。
07:01
所以现在做了一个定义,然后定义之后在类上边咱们加上一个date这么一个注解,把它的get set方法设置出来,所以以上是我们写的一个基本结构。然后这个写完之后,为了咱们后面调用方便,我把这个方法咱进一步封装,就是封装我们成功还有失败的方法,因为咱最终无外乎成功和失败,我在里边单独写两个方法,一个是成功,一个是失败,为了咱们调用方便。那我来写一下啊,首先我先把它那个无参的构造先生出来。就是result。先做一个生成,然后生成之后,下面咱们加上就是两个方法,一个代表成功,一个代表失败。那我写一下啊,第一个。成功的方法。第二个。失败的方法,咱们首先先写一个成功的这么一个方法,我在里边写下。
08:05
我加上一个public,为了调用方便,加上一个C。加上我们这个类型。然后它返回到就是我们这个。里边加上一个T,然后成功方法,我们起个名字就叫这个OK。这是我们写的这个方法。然后失败跟它类似,我在下面也写上一个失败的方法,然后失败方法呢,给它起个名字,咱们叫这个。所以现在把两个基本的结构做了一个创建,创建之后在里边我们写它的具体内容,那我来写一下啊,首先如果说成功的话,那咱怎么做呢?我把代码编写一下啊,其实最终咱要返回的应该就是一个伪造的对象。这里边啊,给各位咱们复习一个知识,这应该是一个基础知识,咱们复习一下。
09:06
大家看啊,因为现在咱们是不是要返回Jason数据格式,那这里问各位啊,你说Jason数据有几种数据格式,就Jason格式或者Jason格式长什么样子。给各位写一下啊,首先各位要知道啊,第一种格式我们可以称为叫Jason的这个对象的格式。然后第二种格式叫Jason的数组格式,这是Jason的两种最基本格式。而咱们先看一个对象格式,那它的标志怎么写,你加个大括号,里边加它的名字,比如说名字我们叫扣。它的值200。再加上一个叫message。然后它的值,比如说我们叫成功。这个给他写一个,所以这就是一个简单的Jason的对象格式,另外还有Jason的数组格式,它的数组格式长什么样子,就是你加个中括号,比如说我写个123这种格式,或者说我可以这么写,我加个中括号,然后里边我加上多个对象,我写个具体的,比如说这个。
10:20
啊,这个值是。Lucy。然后再加一个。它的值我们叫me,这个是Jason的数字格式,所以Jason有这么两种格式,只是说我们经常见到的是两种格式的混合使用,也就是里边既有对象又有数组。而除了这个之外,各位要知道啊,这是JASON2种格式,在咱们Java里边。注意是Java里边。大家要强调啊,你说Java中的什么类型会变成Jason对象,或者说Java中的什么类型会变成Jason的数组格式?
11:00
什么类型会变成这样,大家要知道啊,第一个Java中的对象会变成Jason对象,比如说你现在new一个user,然后user里边的设置它的值,这里边会变成对象,比如说user里边我们设置啊,比如它的这个ID,比如是100,然后它的名字,比如是这个Lucy,这样的话会变成Jason对象格式。而什么会变成数组格式呢?最典型就是这个例子,集合。它会变成这一次数字格式,比如说我们现在有一个历次集合,然后里边有很多的优侧对象,那这样的话最终会变成这次的数字格式,这是它的这么一个特点,大家把这个基础知识给他记住,因为咱后面会用到这特点,也就是Java中的对象。会变成Jason的对象格式,Java中的这个list集合会变成Jason中的数度格式。这个各位知道啊,而咱们目前呢,要返回统一格式,大家看啊。
12:05
这什么格式?带大括号的是不是就对象格式,所以我最终其实就是直接new一个result,把它返回,就会转成这些对象格式,所以咱们斜这两个方法都是返回伪造的对象,为了能返回统一的格式,就直接扭这个造对象给它蕊退里边放数据,它就会变成统一的格式。这是咱一个说明,然后下面呢,我在里边把这个方法我们来写一下啊,首先第一个成功方法咱们加上一个。里边加上泛型T啊,我们叫这个等于上一个。咱们先妞这个对象,然后妞完之后向里边放它的这些值,而这个值特别说明啊,因为咱们成功的时候呢,有两种情况,如果说你做列表的时候,那咱们是不是会有这个date的数据,如果说你做添加修改删除它反数据应该就长这样子,成功失败里边data中没有值,所以这个咱给他单独做处理,就是表示有date值还没有date值,有date值里面加这数据,没有date值,那就直接等于那。
13:23
啊,那咱们单独处理一下啊,首先这里边我们先做第一个处理,比如说这里边我们就表示。写下啊,它就是没有date这个数据的这个方法。咱们啊在里边给他完成下啊,那这个方法没有数据,我就直接蕊到的里边设置里边第一个它那个code也是咱们说那个状态码,状态码呢,咱就写一个200代表成功,这你可以自己约定,然后第二个再设置它那个message,我们这个。成功现在可以了,然后最终咱把它做这么一个蕊退。
14:03
Return result,这样的话,这个方法就完成了,成功不带data的部分啊,这就可以了,然后失败跟他一样,我在里边直接给他复制改一下啊,比如失败咱们状态码是201,这里边加上一个叫失败。这两方法就完成了,就是没有date数据部分,如果说咱们有date数据,那里边需要把date数据塞进去,那咱们再单独写两方法,让他有数据的啊,给他区分一下,这么写让各位看的更明确,当然你也可以在一个方案里面写,然后再做判断,我就给他分别写出来,让各位看到更清楚点啊,那咱加一个有数据的,比如这OK,有data数据。我在这个date。把它传进去,然后在里边咱们做这么一个设置啊,包括这个里边也给传进去,呃,但是file的时候呢,应该不需要反映什么数据啊,咱给他也写下,为了把咱们这知识都给它列习一遍,也给他加上。
15:08
然后咱们啊,先写这个有数据的,比如你做列表会反数据,那怎么做很简单啊,咱就直接把那个t date直接进去就可以了,我在里边写下啊。比如这个位置,为了明确,我做一个判断。啊,咱们判断一下啊。如果说这个date这个值它不等于,那那表示有数据,咱们向result里边可以叫set它这个date给它放进去,这样就可以了,然后这里边同样啊,这个位置我们也是做一个判断。然后判断之后,在里边也是判断贝塔这个值,如果说它不等于,那那咱们把它也是S到这个。Result里面去,这样的话就完成了啊,其实大家发现啊,我这么写之后,咱们这两个方法其实可以没有了,直接用就可以了啊,那咱就保留最终在什么,我这么写各位看的更明确,咱先把我这个写的过程看一遍,最终咱再完善啊,首先我写的第一个。
16:17
OK方法直接返回200成功,然后file是201失败,但是两个方法中没有date,就没有那个数据部分,所以下面做了一个处理,在里边加了一个date,然后根据它做判断,如果他有数据set,没数据就不set,所以最后咱用的其实这两个方法就足够了,上面两个就可以去掉了。我就给他啊,咱为了保留痕迹给它注掉啊,注掉就可以了。所以以上啊,是咱们完成的这么一些方法啊,当然这个完成之后,我现在呢,这个就是code和message写固定的,咱也可以再写几个方法,让他可以再改变这个方法,我就从课件中咱们就复制一下了。
17:05
咱们看一下啊,我们找到应该在最后。这两个方法我把它复制一下,就为了能改变你的状态码和信息,比如咱这里边写死了201失败,但我可以改,改的话我再单独写的方法啊,直接做个修改。所以以上啊,这个过程我们就完成了啊,当然你这个状态码和这个名称信息,你可以给它放到一个枚举类中,大家看到的课件中我就不写了,各位自己去完善一下啊,你看啊,我写了一个枚举类,然后里边有各个状态码对应的它这个信息,用它一样可以实现,我就按照这个过程做到了,所以现在咱就把这个统一返回结果类就创建出来了,就是最终在里边两个方法,一个是成功的,一个是失败的。这个就完成,完成之后,最后咱给他在CTRL中用一下,看怎么去用。
18:02
然后咱们首先一下啊,首先第一个这个service us需要引入进来,但是咱们刚才应该引入过了,所以咱们可以直接使用,那我就直接来到CTRL中,在CTRL中我们来做个修改,首先咱先改一下这个列表,这个方法。说一下怎么改啊,这个代码我就不给它删掉了,我给它注掉,咱们保留这个痕迹,让大家看得更明确。那说下怎么改啊,第一个咱们约定。所有接口是不是都返回统一的这个结构,所以咱们就是让所有接口方法都返回什么注意啊,都是咱们这个统一结果类result,就是所有接口都返于它,而不是反映其他的啊,这个我就直接写了result,然后写完之后往下看啊,这里边查出历次集合,那我们做一个返回,我们用result。点上里面的方法叫OK,因为咱们刚才看到啊,OK方法里边我是不是一个静态的,所以可以直接用,然后在里边传入你的数据,数据就是list的,这样的话咱就完成这么一个返回,通过统一结果返回类伪造的中的OK方法给它返回是咱们统一结果。
19:20
然后这个删除跟它一样,我给它快速改下啊删除,因为它反应是布尔类型,所以咱们做一个判断。我写一下,如果说布尔雷霆是处成功,如果他是false失败,如果成功的话,那我们直接re return。造他。啊,Result点上OK,我写一下。点上OK,注意啊JOK中不需要数据,咱就写个nu就可以了,这个注意啊,刚才我说两个方法,咱写这两就足够了,这就不需要了,为什么?如果你写个那那这行起作用了,你等于那它就不设置就是200成功,这等于那它就是201和失败,所以咱直接几个档就可以了,如果他失败的话,那我们继续屡退。
20:13
写下啊。瑞屯。点上file加个,那这样的话代表你这个失败。所以咱们以上就是把两个接口用统一结果返回类做了一个完善,就各位记住啊,咱后面的接口中,如果说你要返回Jason格式,那他们都是直接写这个result的这个类型,因为咱们统一都用result进行返回。现在我们就改完了,然后改完之后,最后我把这服务启动,咱们最终做个测试,看一下最终结果怎么样啊,咱给他试一下这个结果啊,最终测试一下。等他先起来。
21:00
这是我们提到的啊,这个在实际开发中肯定也是一直用到的一个最基本的准备,咱是写了这么一个轨道类,然后这个要记住,它叫泛型类,就是自自定义一个类型,然后在里面可以用这个自定义类型T完成我们的相应操作,因为你不好确定你的数据到底什么类型,所以用个T代表另一类型,这个要知道。现在启动,然后咱们试一下啊。我打开swa刷新。然后找到咱的接口,比如找第一个查询,所有讲师在里边tryout,然后一点。大家看啊,数据是不出来了,再看数据中啊,扣的200MESSAGE成功date中是不是有我们这个数据,是咱们那个这一层数据这个就可以了啊,是咱的第一个,那我再来试第二个这个删除,比如说删除中我这边传一个二。然后点。执行咱们看结果啊,大家看返回结果是不是就成功,因为它里面不需要什么数据,只是200和成功就可以了,如果失败201失败,所以现在这个就完成了。
22:11
完成之后呢,咱现在这就做到了,但是刚才我提到了啊,我现在成功失败的状态码和信息,我是写固定的,成功都是200,信息是成功,失败201信是失败,这个值可以改,那怎么改,说明用到这个方法。这里边你看啊,加了一个this,就是这个对象,咱可以直接我以这个为例啊,直接点上那个方法,比如咱点一个message里面加信息,然后做个提示叫查询数据成功。这样的话,把它那个message值可以改一下,或者说你可以点了一个code加一个值,这个值也可以改,我就改个message为例啊,大家知道他怎么改就可以了,然后这个改完之后,咱们最终也是试一下啊,看一下结果怎么样。
23:04
我把服务器启动,咱们最终做个测试。看这个最终结果。比如说现在通过我们这个代码,咱就把这个完成了,后面接口咱都这么做,只要反身的数据都统一返回伪造的这个对象。啊,那咱们快速试一下啊。查询所有讲师执行,大家看这描述,查询数据成功是不是就发生了改变,所以这样的话,咱们就完成了统一返回结果的这么一个实现。
我来说两句