00:00
接下来我们再给页面呢添加一个功能,我们可以来参照京东,比如我们在这来检索了手机这一块呢,出现我们相关的商品,我们还可以在这儿来属性进行检索,当我们在筛选的时候,比如我们来选中了某一个筛选条件,那下边呢都是符合我们这个筛选条件的手机,而且这一块会出现我们说的面包屑导航,而这个导航的最大特点就是当我们可以清空它的时候,它会跳到我们上一次没有带这个筛选条件的最终的筛选结果,所以我们希望呢,加上这个功能,我们的面包屑导航,我们选中了哪个显示哪个,而且我们可以取消它,取消了那就去掉这个筛选条件,再来筛选一次,那这个面包屑导航呢,我们可以让前端来做,比如前端分析我们请求参数带来什么,我们这生成我们相应的导航功能,然后取消掉以后呢,再来跳转到我们指定位置,当然我们现在用的呢,是我们服务端渲染技术,当然我们页面的所有数据我们都是。
01:01
服务端交给页面,然后呢进行渲染的,那我们就在后台来处理呢,还是非常方便的,所以我们接下来就来加上这个功能,面包线导航,那想要后台处理我们给页面的返回数据,就得有我们面包线导航的这一块数据,那么接下来就会返回数据,我们来看这有一个search result,我们给它呢,再来加上我们面包面包线导航的数据,诶我们这个面包线导航数据,这个数据呢,最大的特点它呢肯定是一个list,因为我们肯定有多种不同的面包屑,好那么接下来呢,就来先写上一个private,就叫一个list,这list呢,我先来写上一个object,就叫NAY4。这是我们的面包屑导航,但这个面包屑导航都包含哪些数据,我们可以来看一下,首先包含我们选中了哪个属性,它的这个属性名,以及它选中的这些值,包括呢,我们希望当我们点它以后,我们要跳转去一个地方,那跳转到哪个地方,你也告诉我们,我们就直接跳就行了,所以呢,包含三方面的数据,那每一个包含哪些数据,我们就来直接抽取一个VO public static,就叫class,就叫navy VO,好然后呢,这个navy VO我们先来抽取过来,我们这个navy VO呢就长成这样,首先它拥有的第一项数据是string,我们这个导航的名字navi的name,哎,我们看到呢,这一块我们要显示这个名字,因为值呢跟它是不一样的颜色,分割开显示的,所以我们抽取成两个,首先导航的名字,第二个是我们这个整个面包屑导航的这个值能为value,那第三个。
02:44
就是当我们取消了它以后,我们要跳到哪个地方好,我们第三个呢,就是private string,我们link地址,我们要跳到哪一块位置好,我们把这一块呢,我们来就来加上,那么最终就希望这一块放的是这么一个数据,那这样的话呢,我们要的所有导航内容,我们在这儿呢,都可以遍历显示掉就行了,所以接下来我们交给页面返回的所有值之前,诶我们以前呢,构造请求,构造完了以后分析检索分析得到我们这个结果,那么最后呢,给这个结果我们再分析到最后里边,我们再来追加上我们最后的数据,那在下边好,我们来再来追加一个,就是呢,构建我们的面包线导航功能。
03:28
我们这个叫导航导航,那这个导航功能的这个构建,主要就是给result里边,我们再来set一个叫navis,就是它,那么先来准备好我们这个navis,你有一个我们叫navi VO,好我们就准备好它,那准备好它以后呢,我们将它所有的list放进去,所以呢,我们应该是准备的是一个list list类型的他。好,我们来加上这个na VO o,那就new一个,我们就叫a list,好,A list好,我们准备好list类型的数据,我们来放到里边,那接下来每一个na VO o都是什么样的,我们就来得分析了,那这个分析呢,我们首先得看页面,我们来参照特点,首先页面呢,我们选中了哪个,肯定会给我们带来相应的请求参数,选中了哪个属性,而且呢,按照约定,我们这个选中的属性是这么来组装的,比如我们在CTRL里边,我们来传请求参数的时候,我们传了很多,我们有选中了哪个属性,那这个属性呢,会带上ID,然后和它的值我们一分割出,前边呢是ID,后边是值。
04:39
所以呢,我们能得到带来的所有属性,而且大家注意,我们面包屑导航这一块呢,我们只是在这儿导航筛选属性,其他的不导航,比如我们来检索条件是手机,如果我们把手机这个检索条件都划了,那相当于这些属性有可能都搜到我们这一些吃货了,那就根本这些吃货不具有我们这些属性了,所以呢,我们这些检索条件以及分类,这是我们固定的,而导航呢,只是导航的我们的筛选属性,所以呢,我们要来判断我们传递过来的所有筛选属性,每一个筛选属性呢,都是这么一个值,我们把它一分割出来就能得到信息,所以呢,我们想要在这来组装结果的时候,我们就必须来便利我们的这些检索属性,那这些属性呢,我们是这个PAR,这是我们请求参数,请求参数里边呢,有一个get at ts,这是我们传递过来的所有筛选属性,好,我们来给它stream一下,点一个map,我们来映射来修改每。
05:40
一个每一个的at tr来放过来,好,然后呢,最终我希望把它collect to一个list变成我们相当于这个nay VO的这个集合数据,所以呢,我最终是希望返回我们这个nay VO,好把这个nay VO拿过来,Na VO,那么就像na VO na VO,然后呢,我们就等于一个你一个na VO。
06:05
那么这一块的东西呢,我就不要了,CTRLY我们来删掉,我们把它每一个at tr我们都得分析给它,组装成这个NAV VO这个VO的集合,然后呢,我们放到这里边进行显示就行了。好,我们接下来就要做的就是分析每一个at t RS传过来的查询参数值,然后呢,我们来构建出这个VO,而这个参数值呢,按照约定我们是这么来传的,它呢是这个样子,中间断了短横线分割的好,我们拿过来,好它是这个样子,那么接接下来这个样子,我们就来给分割,首先我们拿到当前的这个at tr,我们来分割点split,我们来继续进行分割,分割呢,我们以下划线分割,下划线分割出来的后边这一串,那这就是我们导航的这个VO里边的值,我们要显示的这个navy value这个值,那么就是SSE。
07:05
然后呢,将来前边这一串这是ID还不是名字,所以呢,我们想要在这来set名字的时候,这有一个navy name,我们还得按照ID来查处名字,而按照ID来查,这又属于我们商品服务的功能,所以呢,我们希望远程来调用我们商品服务,那么search呢,相当于就要加入远程调用功能,那么先来看我们这个search,那么这个search呢,默认现在呢,没有远程调用功能,因为我们smart cloud,包括openpo phone我们都没导,所以我们先来给它导入这个远程调用,那导呢,我们现在商品服务里边,将我们所有的之前的东西先把cloud版本我们拿过来,我们都来统一spring cloud呢版本都是这个,然后呢,我们商品服务里边我们导了open phone,包括spring cloud想要用必须先来导入我们spring cloud的这个依赖管理好,我们拿过来在search里边来导入spring cloud的依赖管理,然后呢,我们再来导入phone的功能,Phone呢主要就是有一个叫open。
08:05
粪这个start啊,来导入它,我们这个粪的功能呢,就算是填过来了和CTRY版本呢,不用控制,我们在下边控制了,我们要远程调用,先来做第一步导入了份功能,接下来第二步在search里边,主程序里边,我们要开启份的远程调用,那要开启呢,我们是就需要一个注解叫enable分clients,好,我们开启远程调用,开启远程调用,要开启远程调用呢,保证自己跟别人都要放到注册中心里边,好没问题,那接下来我们想要所有的远程调用,我们全部呢都放在我们这个分包下,好分包这个分包呢,我们接下来想要调用我们商品服务,我们就来写一个接口,我们为商品服务专门来写一个product,我们就叫份service,好,这是我们远程调用的商品服务的,那既然要远程调商品服务,我们就得加一个注解,叫enable分client,这个不叫enable了,我们就叫分client,标明它是一个份客。
09:05
户端想要调用哪个服务,我们把这个服务名拿上来来,因为我们这个服务注册呢,都是用我们项目名注册的,拿过来,接下来我们就要调用第一个功能,相当于按照我们属性的ID查到我们属性的详细信息,那我们以前这个逆向生成的工程里边肯定都有这些内容,我们来看一下商品服务里边,在商品服务里边我们逆向的我们全放到APP里边了,好,我们来点开我们在at tr controller里边,正好呢,我们之前有一个叫info,相当于按照我们这个product at tr信息,然后呢,我们来查它的详细信息,按照at t rid来查的,然后最终给我们返回一个at tr response VO,这个里边呢,不仅继承了at tr VO相当于由我们at tr带来的名字等各种详细信息,而且还有当前at tr的其他关联信息我们都有,所以呢,我们就可以用这个查询方法,那么就来远程调用它,那么就在我们的远程接口。
10:05
里边好,我们search的远程接口来点开,我们找到它的远程接接口,我就来调用第一个功能,我们PA,我们最终会返回的是R,全部远程呢都是返回R对象,好把这个R拿过来,然后呢,我们就将get at tr,比如我们就将get at tr in,诶,这是我们的返回结果,那最终呢,他要跟我们这个at tr controlrler映射,所以呢,我们先把这个请求路径拿过来,由于我们发的是一个get请求,而且主要是这一块我们会传一个路径变量CTRLC,所以我们来到分service里边走,相当于我们远程的方法,怎么声明的,我们在这一块就怎么声明,本来就应该。把这一块的完整信息直接复制放到这儿就行了,好,直接复制放到这,当然呢,我们这一块呢,就叫at tr应放,因为我们最终的这个service里边集合了我们商品服务的所有远程调用,然后这一块呢,我们就来写上,比如我们就叫get满屏吧,因为我们发的是get请求,就精确来写上get蛮屏,大家注意我们这个路径呢,不完整,我们整个完整路径还要加上它的基准路径,我们把这一块基准路径也复制过来,好,相当于我们想要获取我们这个属性的详细信息,我们就是来调它的,那最终调完它就会得到我们这个R对象,好,那么就在这远程先来调一下,没要远程调,我们先来调注入我们这个分的service好。
11:34
哪吒来注入product。我们的份service product,我们的份service,这是我们远程的接口,好,我们来owa自动注入进来,注入进来以后呢,接下来我们就来调用它的功能,我们要知道我们这个当前的这个属性ID对应的属性的名字,我们就得调份service点一个正好有一个at tr英F方法,我们传入ID,我们先用了点一个pass了,来将我们这个S0转换成我们指定的ID来传入进去,好。
12:12
好,我们最终呢,返回我们的R对象,而这个R对象呢,我们以前抽取了一个get data方法,能把我们返回的数据data里边抽取过来,转成我们指定类型的节省格式,所以呢,我们现在就来给它进行转换啊,我们就来判断,如果我们这个R返回的结果是正确的。相当于get to等等零,那相当于呢,我们都是正常返回,那么就拿到最终的结果R点一个,我们有一个叫get data方法,我传一个type reference,这个type reference呢来看一下这个接口type,我们reference,这是我们fast接S给我们提供的这个功能,那么就来new一个,它这块泛型是什么,我们就过来可以指定一下,那我们就来new一个type reference,我们还得写上一个大括号,对象这一块呢,我们来指定我们接口的类型,来看远程的方法,远程的商品的这个controltr了,给我们这个英fo返回的是at tr response为,所以我们相当于获取的是这个数据,而且呢,这一块比较奇怪,我们本来放数据呢,是放在我们的data这个区域里边的,但是它放到了at tr这个区域里边,所以呢,想要获取我们还得获取到at t的数据,或者呢,我们把。
13:35
它放到我们指定的这个R的贝塔里边。那这样呢,大家嫌太麻烦,我们可以再来抽取一个方法,就是呢,来传的时候,可以来传入一个你要获取什么里边的值,把它转成什么类型,所以呢,来给一个string name,你还可以指定这个K的名字,好,我们就叫K,然后呢,这一块我们就不获取data了,我们指定的K的名字。
14:00
好,然后我们就在这来进行调用R,我们就不调用get data这个方法了。第2GET data我们来指定一个K,我们现在要获取at tr的值,然后呢,它是什么类型,我们来就用一个type reference,我们来reference这个type reference呢,泛型这一块我们就来写我们叫at tr,我的response VO,而这个response VO呢,只有商品服务它自个儿能用,我们可以来看一下这个response VI,它呢只在商品服务里边能用,所以呢,为了方便,期间我们应该将这个response VI以及这个at tr VO我们都放到大家都能用的,我们来可以看一下,他呢,现在只在他自己的VO包里边放的,所以呢,我们应该放到公共包,这是第一种,第二种,如果我们自己只能改自己的微服务,改不了公共包,那么相当于就对照它封装一个就行了。好,我们在这儿来整一个VO,这个VO呢,我们就叫at tr。
15:00
我们比如就叫response VO,大家注意啊,我这块呢,专门名字写的跟以前不一样,然后呢,接下来以前有啥值,我们就对照给这儿来一封庄就行了,他以前呢,继承这个VO里边有一堆东西,把这一堆东西呢,我们先拿来放到我们的response VO里边,这是它从父类里边继承的第一个,然后呢,它默认的response VI还自己有这三个我们都可以放到这,然后呢,我们at data加上那以后封装数据,我们就不靠远程服务的这个VO了。因为远程服务返回什么数据,我们已经对照给它封装好了,那我们就来加上我们自己的,我们就叫瑞Bo VO,诶这是我们自己的类型,好,然后呢,我们最终来返回这个结果,我们得到我们相当于at tr真正的信息。那在这个信息里边就有我们at tr的name。那么这个name呢,就可以来放到我们这个里边了,好,我把这个放过来at tr name name呢,就是我们指定的这个值。
16:06
CTRLY我们删掉,好,这是我们拿到属性的名字,而且如果远程调用失败了,我们就不设置名字了,那我们就给它整一个默认的空值之类的,比如我们来塞。NAV name,我们这个导航的名字,如果真失败了,我们就拿它的ID来做为名字,这也行,所以呢,我们这个导航的值,导航的名字我们都准备好了。那接下来最后一步,当我们取消了这个面包屑以后,面包屑以后。我们要跳转到跳转到哪个地方,那么下节课呢,就来分析我们这个功能。
我来说两句