00:00
各位同学大家好,下面呢,我们继续往下来学习,刚才呢,咱们写了第一个测试的接口查询所有角色,让大家感受了这个接口的开发过程,那下面呢,我们继续往下来做,下面咱们来做什么呢?大家看我课件里边写到我们要定一个统一返回结果对象,那这个什么意思呢?我先说明一下我们这个操作的背景,然后咱们进行实现。大家看啊,我刚才写了一个接口,查询所有角色,然后接口返回的是什么?是不是一个list集合,而这个list集合如果单纯从功能上来讲,这么写肯定是没有问题,功能可以实现,但是大家想一下啊,我一个项目中肯定不是一个接口,另外一个项目开发肯定不是一个人开发,是不是有很多人协作开发,那这个时候产生一个问题,因为每个人的习惯不一样,比如说这个接口啊,我这个返回历次集合,那别人可能返回的是别的格式,比如说加了一些其他的数据,那这个时候可能会造成一个项目中不同的接口,它的数据格式都不一样,咱们为了开发更加规范,我们有一个约定,什么约定,让我项目中所有接口都返回相同格式的数据,这有的说明啊,数据可以不一样,但是格式必须一样。
01:23
所以我们要做这件事情,把咱们项目做的更加规范,让所有接口都返回相同格式数据,那这格式怎么样?家看我课件里面啊,在实际中呢,这个格式到底是怎么样的,其实没有特别的约定,但是我们一般来讲啊,这个格式一般包含以下几个内容,第一个状态码。比如说咱们约定200成功,201失败返回信息,比如说成功失败,另外就是你的数据咱做查询,假如说返回这个数据,那我们用这个进行返回,这是一些比较基础格式,实际开发中跟我们这个可能一样,可能不一样,但是思路是一致的,那下面呢,咱看几个事例,首先大家看第一个事例,第一个事例呢,是一个比较完整的数据,大家看啊。
02:15
第一个code代表状态码200,第二成功,第三个date中就是返回的数据,然后OK代表处,这是我们的第一个数据,然后第二个呢,是有一个带分页的,在这里边首先有你的数据,然后这个。什么意思啊,是不是一共多少条记录,包括当前页size,每页显示多少条记录,然后你一共有多少页等等,这是一段数据的部分,另外呢,我们操作中还有这么一类格式,大家看这两个啊。比如说我现在啊,做了一个添加,添加成功之后,咱肯定是没有数据,只是返回成功是或者失败,所以这个时候它就没有数据部分,但是它有成功和失败,也就是说不管你是什么样的接口,返回都是相同格式,我们约定200成功,201失败啊,当然你可以约定别的值,我就以它为例,这个就叫统一返回数据格式,那在下面参考它来编写我们的具体实现。
03:21
怎么做这个说明啊,因为我们项目中所有接口都要用到这个统一返回结果,所以咱们定一个统一结果返回类,在里边做我们的具操作,因为这个类是公共的,所以给它放到这个common里边,在这里边做具体功能,那下面来下啊。首先我们在这里边,咱把这个找到。先创这个我们进行创建,然后创建之后呢,在里边加入相关的,我就按照课件中的点啊,首先第一个加上这么一个东西。
04:08
这叫什么,是不是叫枚举啊,咱从这里边取到你的状态码,包括你的信息,所以我们第一个先建个枚举类生成它对应的获取的方法,我在里边写一下啊,写到这位。创建一个枚举,我们叫result code枚举。然后创建之后,在里边加上一些固定的一些值,从里边取到这部分我就直接复制了,有些可能暂时没到,咱都给他拿过来,目前主要用的是这两个,一个是200成功,一个是失败。然后呢,下面我们加上相关属性个状,我们加一个private。T格,咱们叫这个扣。这是第一个,然后第二个我再加上一个private string,就是它相关的信息加上之后,我们创建它的这么一个相关的方法。
05:09
啊,咱们写一个啊,Code这个微距。里边加上这两个。属性第一个靠打。第二个。然后咱们做一个赋值啊,这个赋值我就从里边复制了,有这么一段基本代码。然后咱们加上的注解啊,咱就直接来一个呃就可以了啊,生成它里面对应获取的方法,所以现在把这个枚举类我们都是创建啊,目前应该主要需要这个成功失败这个我就给它去掉了啊。然后这个之后第二部分呢,我们建一个统一结果返回类,这个类我给它起个名字,我们就叫这个就是结果。这个进行创建,按照刚才提到的啊,在这个类里边呢,我们现在有三个基本组成部分,第一个状态,第二个信息,第三个具体的数据,所以我们现在在里边怎么做,咱们创建三个属性。
06:13
我写下啊,第一个in code代表你这个操作的状态码,咱刚才约定的200成功,201失败,然后第二个private死message,代表你这个信息,或者说返回的这个信息成功失败,然后第三个是我们的具体的数据。Private,因为这个数据呢,它是不同的类型,所以加上一个枚举类,加上一个自义的T,啊,这里加个T,我们起个名字就叫这个。Date是具体那个数据。所以现在把这个加上,加上之后呢,在上我们加上一个这个解成get方法,这部分我们就完成,完成之后继续来看啊,就这个写法有多种方式,我就按照我这里习惯的方式来写了,首先大家注意啊,我现在这么来写,大家看这个代码什么意思。
07:15
我加个private。Result。然后大家看。这段代码什么意思?这是什么?是不是构造,但是我构造怎么样,是不是做了构造的私有化,构造私有化之后什么特点?只能我自己操作,而当你构造私有化之后,我的类中别人要操作,是不是要提供对外可以调用的方法,这方法是不需要这个cid静态的,所以我下面呢写两个方法,一个咱就代表成功,一个代表失败,但是因为咱刚才提到了成功和失败。比如说我做添加修改,它没有数据,我做查询有数据,所以咱们写这么两个方法,一个成功,一个失败,成功里边有数据没数据,失败里边有数据没数据,所以下面我来做个编写,这里写一下啊,第一个我们写一个就是返回成功的方法,第二个返回失败方法,咱们先来个成功方法。
08:24
我写到这里啊,咱们加上一个。啊加这个,然后这个方法起个名字,我们要这个返回结果就这个加上一个。把这个我们给它加上,然后加上之后,我们这里边直接给它做一个返回就可以了,我们加上一个。瑞退。result.ok。啊,包括里边这方法咱一会儿再完善啊,先把这个结构先写出来,这是成功,然后成功之后呢,因为成功里边我们可以有数据,也可以没数据,所以我们再加上一个就是返回有数据的方法,Public这个cid。
09:12
加上这个泛型。然后加上一个result。这个再加上一个,然后这里让有数啊,这个数加上一个这么一个t date。最终做一个未退。这个啊是我们写到的,我先来跟呢,一会咱得完善啊,因为数据需要做一些进一步的封装,失败跟他类似,那我快速写一下啊,失败用这个咱给它改一下啊。失败这个名字我就叫这个失败。这里加上这个。所以现在啊,这是一个最基本的一个结构部分。然后结构写完之后,下面我们写到更具体点,大家注意啊,因为这过程中我们最终返回是一个的对象,在对象中有你的状态码信息,包括你的具体这个数据,所以咱需要对这些做一些处理,那我这里边呢,我就专门写方法来处理,这方法我从里边复制了啊,咱们看一下其实并不复杂。
10:24
我们给他找到啊。首先我们找到这个方法,我把这个直接拿过来啊。大家看一下这个方法。放到这个位置。这一方法就用于封装数据的。我们在这里写一下啊,就是封装返回到数据的。这位置给它改一下啊,呃,我就不复制了,给大家写一遍啊,各位自己写的时候呢,把我这个类从课件中直接复制可以了,我这里为各位看的更清楚,我来重新写一下啊,稍微改造一下,其实之前那么写都可以啊,按照课件写都是一样的,我就直接现场发挥了啊,那怎么做呢?首先这个result肯定是要一个嘛,那我就上一个result。
11:14
给它一下啊,然后扭完到了之后,向里边是它的值,大家看这个值就是它的状态嘛。加个注释,然后这个值是里面那个相关的这个返回到信息,比如说你状态码是200,那你就返回成功,如果你是别的值,那返回其他的对应的信息,比如成功失败之后呢,在里面有数据,但是数据咱们提到这些数据可能有也可能没有,所以这位置我在里边做过判断,然后封装这个数据,也就是咱们看到这个date部分。单位简单写一下啊,我这个位置做一个判断。判断一下,如果说里面这个。
12:00
它的不等于空,那表示有数据,有数据的话,我里来这个date就个把这个给放进去就可以了,所以现在这个方法咱们就完成了。完成之后呢,下面我们给他做一个最基本的一个处理啊,咱给他就处理一下就可以了。那我们来写一下啊,这个位置。首先这里边给他改一下啊。我们这里边点上这个方法,就是这个build啊,咱这些加上啊这个。这个方法,然后第一个因为这里我没数,所以第一个就来个,那第二个我们那个枚举code,我们success,这就成功,当咱返回它就返回成功的信息,这是第一个,然后第二个是有数据的,有数据的我们也给后跟上面一样。
13:00
Build加上这个date,然后加上枚举中的success,代表成功。所以大家看啊,现在我们把这个成功方法就完成了,失败方法跟他应该是一样的,失败方法咱就简单写一个就可以了,因为咱应该没有反映这个具体数据的啊,就给他来一个失败就可以了,我这里啊快速写一下。加上build,第一个就来一个,那然后第二个加上里边这个file,如果你有数据跟上面其实是一样的啊,我也给他写完了啊,就这个部分。用它复制改一下这个我们叫。是他然后这里边改一下这个。所以大家看啊,现在咱们把这个最基本的这个结构就完成了啊,这是我们写到的啊,当然写的过程中,比如说我们现在这个值,如果你想再进一步调用,包括这个code,包括message,你可以再往里面再扩展一些方法。
14:04
这个啊,咱把这两方法直接给他拿过来。放到我们的这最后这个位置。啊,为什么意思呢,就是刚说的更通俗点啊,比如说现在我约定200成功。信息是成功,201失败信息是失败,那我们写的时候如果失败,那反的必须是这个值,这个值比如说我觉得不太合适,我可以自己扩展,用这两个方法,比如你设置你的状态码,假如是2001,你的信息比如是操作失败啊,用它可以进一步扩展。所以以上咱就把这个统一结果返回类就完成了,各位把这个能给他编写出来,按照我的课件直接复制可以了,我这里各位有快速写了一遍。然后这个写完之后,最后呢,咱把这CTRL做个改造,让所有接口都返回相同的结构。那我们看一下怎么改啊,第一个各位注意啊,这里就不要写list,咱为了看着明确啊,这个代码给它注掉,我就不删掉了,然后下面重新写个,那怎么做没复制过来啊,我再复制一下。
15:11
这个我先去掉。把这个复制过来。然后咱看怎么来改啊,第一个这里不写list,写什么呢?就加上这个,我们刚才这个统一结果返回这个类,加上result。注意别加错啊,因为这里边你看啊,有很多相同的这个。你别加错啊,都是result。这么做?点上OK。然后在里边加上你的数据list,因为刚才大家看到啊,我刚写的这个方法也就这个方法。就是它OK,里边什么都不传,那就返回基本这个状态码和信息,如果传的话,往里边就会封装我们的数据,所以现在我们有例子,把例子数据进行封装就可以了。以上是咱们这个改造完成了统一返回数据结果。
16:14
这是我们写到的啊,然后这个写完之后,下面呢,咱把它重新启动,我们最终这样的一个效果,这个过程中有个细节之前提到了,这个叫common。而common呢,我们看这个特点啊,它在swi中已经引过来了,而swis在我们的swi OA里边把它也做了引入,所以咱能用到这里边的啊,这是ma这个特点啊。然后现在我把这个重新启动,我们最终做个测试,试一下最后结果,看它返回的是不是咱们要求这个数据格式。有状态码,有信息,有我们的具体数据如何做添加,没有数据,但是它肯定会有状态码和反应信息。
17:03
也就是说你所有接口。只要反数据都返回的对象。大家看啊,现在启动了,然后到里边我们现在刷新。各位看结果啊,在结果中就咱们的结果,包括各位看状态满200。信息成功date里边是我们的具体数据,所以现在啊,我们把这个就写到这里,统一返回结果。
我来说两句