00:00
好,那我们接下来的话呢,我们就该编写控制器的代码了,当然这个控制器是什么意思呢?实际上就是呃,我们在访问一个网站的时候,对吧?也就是说你在访问,比方说访问这个URL的时候呢,那么后端应该怎么去处理它,对吧?后端应该怎么去处理它,实际上就是我们需要编写针对每一种URL的处理逻辑,实际上这个叫控制器,对吧?当然我们在写控制器之前的话呢,呃,我们先来写一个小的工具类对吧?呃,也就是病这样的一个类,为什么呢?因为呃,我们需要,呃就是说。保证我们HTTP响应返回的类型它都是一样的,那它是一个什么样的类型呢?对吧?呃,我们在这边我们新建一个软件包吧,叫做YouTube,好啊,那我新建了一个软件包以后呢,那么里边我新建一个Java类,就叫做result这样的一个类,也就是说我们会把每一个请求的响应呢,都给它包装到这个呃,Result类里面,对吧?都给它包装到result类里面,那这样的话,呃,代码看起来统一一点,我们这里边我们需要有一个泛型,对吧?那么这个泛型泛行T表示。
01:23
返回数据的类型对吧?啊,当然在这的话呢,我们有这么几个字段,比方说第一个字段的话呢,是public inter code,那这个是返回码,对吧?那么还有呢,就是public string message,那这个是返回信息,那么还有呢,就是public t data,对吧?那这个就是我们的呃,返回的数据类型,我们一会在使用这个result的时候呢,大家就知道呃,它大概是什么意思了,对吧?好,那在这的话呢,我要创建一个全参数构造器。
02:12
呃,全参数构造器对吧,就是构造函数,我点击一个确定,呃,当然的话呢,就是说我们每次在实例化一个result的时候,你都会输入一个new的话呢,那这样的话看起来呃不是特别优雅对吧?所以说我们来构建一个静态方法,呃,当然这个静态方法,呃我们这边需要用到一个泛型,就是T对吧,也就是我们约束这个静态方法里边的,呃泛型是T,然后它的返回值是什么呢?返回值是result,然后翻新为T,然后这个方法的名字叫做of,然后引t code string message,然后t data对吧?然后我们返回什么呢?我们return new result,然后把这个code呀,Message呀,包括data给它填进来,那这样的话呢,我们就可以直接调用这个静态方法呢,来实例化一个result出来,呃会减少一些代码量,对吧。
03:13
好,那我们有了这个,呃,就是说返回数据的这样的一个工具类的话呢,呃,或者是叫做B的话呢,我们就可以开始呃编写控制器了,对吧,我们就可以开始编写控制器了啊当然我们在这里边编写的控制器的话呢,首先你还是要新建一个软件包,叫做什么呢?叫做controller对吧?我们的第一个控制器呢,我们就写这个用户的控制器吧,就是user controller对吧,User controller,呃,实际上它就是调用一些user service里面的一些服务,对吧?呃,然后呃来编写的这样的一些控制器,好,那么我们编写完了,我们在测试的时候呢,我们就知道这个控制器它是呃干嘛了?首先我们在这里面要给它打一个注解,叫做rest controller,对吧?那么这个注解的意思是什么呢?那这个注解的意思就是说我们下面这个控制器啊。
04:13
实现了一些rest API,对吧?实现一些rest API,至于具体这个rest API是什么呢?呃,实际上大家可以下来看一下,它就是URL的一种命名方式对吧?URL的一种命名方式,呃,我们来看一下我们的URL的命名,大家应该就能大概明白它是干什么对吧?因为你没有必要说是,呃,把它搞得特别明白,好这个是第一个注解,那么第二个注解呢,就是我们的request mapping斜杠啊的命斜杠user,那这个表示什么呢?表示对吧?当然我这儿呢是local host冒号8080对吧,我们监听的是呃八零端八零端口,那它表示。
05:02
Locals冒号8080斜杠的命斜杠user对吧,然后开头的URL由呃由当前控制器来处理对吧,也就是说我们。Local或冒号8080斜杠的命斜杠user斜杠开头的URL呢,就由我们这个user controller来进行处理,它就会自动的把这个请求呢路由到,呃,我们这个控制器,这个实际上也就是我们spring boot,呃这两个注解它的一个作用对吧?好,第一个的话呢,就是我们获取所有用户的API对吧,后端API好,那在这的话呢,我就是public,当然我们要返回的result对吧。它里边的泛型返回的是什么呢?返回的是user类型的,呃,列表对吧?然后呢,Get all users OK,我们直接return一个result.of当然我这里面的返回码是200对吧?呃,我们为了教学方便的话呢,实际上我们所有的请求都是返回200对吧?然后在这里边呢,我们返回的消息是success,然后我们要返回的数据是什么呢?User service.get or users对吧?好。
06:35
然后呢,我们再给它来打一个注解,我们打一个什么样的一个注解呢?那就是get mapping对吧,那么在这的话呢,就是get all users。那这个是什么意思呢?对不对,实际上这个就是当访问对吧,Local horse冒号8080斜杠的命斜杠user斜杠get all users10对吧,就会调用以下方法并返回数据对吧?它其实就是做的这样的一个事情,我有了这两个注解的话呢,那我就local hosts冒号8080斜杠的命斜杠user斜杠,呃,Get all users呢,那么它就会调用这个方法,然后呢,返回一个啊result这样的一个数据,对吧?好,那我们现在的话呢,我们就可以把这个云台application给它跑起来对吧?呃,给它跑起来,然后看一下,因为我们现在我们已经写了一个,呃,就是说URL的这样的一个处理逻辑了,对吧。
07:49
那我们现在把这个应用跑起来之后呢,对不对,我就可以直接在呃浏览器上面,比如说我在这里边,我访问一个local host的冒号8080斜杠啊的命斜杠user,斜杠get or user,诶你点回车你就会发现。
08:12
他就把这个数据返回了,对吧,你会发现它返回的是一个Jason这样的一个数据结构,对吧?当然就是说你也不一定要用浏览器来测试,你也可以使用类似于像postman这样的工具,对吧?大家可以下载一个,然后去,呃。对吧,你在这个URL里边,你输入一个这个,然后它是一个get请求,然后点击send,对吧,你就会发现,诶,这个就是我们的这个API返回来的数据,对吧?你写的这个处理逻辑,比方说你可以看到我这个result的结构是有code的,有message,还有一个就是呃,我们要返回的数据,那你在这你要对比的话呢,你就会发现它的code是200MESSAGE success,然后它的data。这个字段呢,返回的是一个列表,对吧?那么这个列表里边的每一个呢,都是一个字典,ID是EU的内的密,密码是多少,然后它的角色是什么样子的,对吧?也就是通过这个例子,大家就基本上应该知道说是诶,呃,我们的这个控制器它具体是干嘛的对吧?这个控制器实际上就是诶,调用这个服务,把数据取出来,然后塞到result里边,然后,然后当你在访问这个URL的时候,返回给前端,对吧?所以说其实这个服务呢,呃,它倒并不一定要这么写,对吧?也就是说你把对数据库的增删查改都写到这个get all users这个逻辑里面,其实也是没有任何问题的,对吧?其实也是没有任何问题的,呃,只不过这里边我们是为了解耦和代码的可读性,然后把它分成了控制器和service对吧,就是说服务。
09:58
我们在调用服务呢,从数据库里面取数据,然后呢再包装成result返回给前端,对吧,也就是当你访问这个URL的时候,还做了这样的一个事情啊。
10:09
当然我们可以继续写其他的对吧?比如说根据用户ID获取用户信息对吧?当然你可以先定义它的URL对不对,比方说这个URL呢,是get user斜杠,然后呢,这个是我们的user ID对不对?也就是这里边呢,你要填一个user ID,实际上这样的一种,呃,UR的风格呢,就是restful API的风格对吧?好,当然我们返回的呢,是也是一个result,然后它的泛型是user,然后get user by ID。对吧?然后呢,我们这里边要打一个注解叫做pass variable对吧,Long u ID,为什么我这里边我要打这样的一个注解呢?因为这个pass variable表示我们的这个参数呀,它是直接在URL路径里边的,对吧?所以说它是一个pass variable,好,然后呢,我们直接return result.of对吧,200SUCCESS,然后呢,我们当然还是调用user service.get user by ID user ID OK,好,那这样的话呢,我们就又写好了一个URL的处理逻辑,对吧?那你如果说我重启一下这个云台application的话呢,哎,我们就可以来访问一下对不对。
11:36
比如说我在这里面使用postman对吧,那在这的话呢,我可以访问什么呢?比如说当然它的请求的开头呢,还是阿dmin斜杠U的斜杠对吧?然后呢,是get user的斜杠一,那这个的话呢,就表示我们想要取的数据是对不对,User ID唯一的数据你可以看到它就返回了。
12:00
对吧,它就返回了,当然你可以说这个get u ID,比方说是个三。对吧,他同样也可以返回,对吧,他同样也可以返回。那这个三的话呢,它就是我们的那个。Pass variable,也就是这样的一个叫做路径变量对吧?好,我们继续写其他的,呃,URL的处理逻辑,或者说继续写其他的这个API,比如说新增用户对吧?那么新增用户的话呢,那它是一个POS的请求对吧?Get请求获取数据,那么POS请求呢,呃呃,它实际上是我们可以从前端向后端呢发送一些数据,对吧?当然这的话呢,我的这个URL呢,是ADD user,然后呢,Public result,它泛型返回的是string类型,对吧,数据是,然后ADD user。然后呢,我们的这个request body,也就是说呃,它的这个请求体对吧,那这个就是user,然后user info OK。
13:08
好,那么在这儿的话呢,接下来的话呢,我们就调用user service,点爱的user对吧?点爱的user,然后呢,User info.get user name呢,这个是用户名,然后呢,我们要对密码呢,进行一个MD5加密,对吧?User info.get password,也就是说你不要忘记对呃,这个。用户名进行加密对吧?对密码进行加密,然后呢,把它写到数据库里面,写到数据库里以后呢,我们就可以返回一个结果了,200SUCCESS,然后。对吧?比方这里面新添加了一个用户对吧?好,那这个就是我们的新增用户的对吧?处理新增用户的post请求的这样的一个功能,也就是说我们POS请求请求体呢,它会根据你请求体里边的数据呢,自动把它序列化成一个user这样的一个病这样的一个类,对吧?然后我们序列化成user b这样的一个类的话呢,我们就可以取它的用户名以及密码出来了,对吧?呃,那在这里边的话呢,我们就可以呃重启一下这个应用,对吧,重启一下这个应用,我们可以在前端呃使用postsman呢来测试一下,呃,就是说新增用户这样的一个呃功能,对吧?那在这的话呢,你就可以比方说,呃,我的这个URL请求呢,是ADD user,然后呢,我的这个请求呢,是一个比方说post请求对吧。
14:47
POS请求,然后我点击这个body的话呢,那这个就是我要发送的数据对吧?这个就是我要发送的数据,好那么我要发送数据呢?比如说我在这个POS请求的请求题里边,我的username是什么呢?我的username比如说是左元对吧?然后我的password冒号呢,比如说它是一个六个一对吧?好,那这个就是我们的request包底,也就是请求题,那么当我点击一个send的时候呢,你就会发现诶,它返回了一个。
15:23
这样的一个响应叫做200,然后新添加了一个用户,那么由于我们新添加了一个用户的话呢,那如果我在这里边我再调用get all users这样的一个get请求的话。对吧,你就会发现,诶,我又添加了一个用户进来,又添加了一个用户进来,你这里要注意的是什么呢?就是说我们请求体的这个Jason格式的请求体,对吧?它的这两个字段名,你必须和user这个并类的这两个字段名一样,它才能给你正确的序列化过来,它才能给你正确的序列化过来啊,那这个就是posts请求啊,啊所以说接下来的话呢,大家可能需要在底下了解一下,类似于盖请求呀,Posts请求呀,包括对吧,删除用户这样的一个delete请求,对吧。
16:17
Delete mapping对吧?那么也就是删除一个用户的,呃,这个URL的话呢,那么它应该是delete user,斜杠user ID对吧?然后呢,我们public result,当然它的返回值类型,它的泛型呢,也是一个string对吧?Result的泛型呢,也是一个string,然后呢,Delete user,我们根据用户ID呢来删除用户对吧。当然这的话呢,也是一个路径参数,Pass variable long user ID好,然后呢,我们调用user service里边的delete user by ID user ID,哎,这样的话呢,我们就把用户删除了,然后呢,Return一个result.of对吧,200SUCCESS,然后。
17:13
我们是一个。User对吧?当然在这里的话,你就是直接一个返回一个字符串,那就是删除一个用户对吧?啊那这个的话呢,我们下面这个result of这样的一个实例的话呢,就是我们返回给前端,呃这样的一个呃东西,对吧?所以说你在这里面,如果你说是OK,呃,我把它这个语音开application呢,重新启动一下的话呢,对不对,当你每次编写完代码,你想要去测试的话呢,你必须重启,对吧,你重新启动一下,比如说在这,哎我调用的这个API呢,是一个delete user对吧,我要删除的用户ID,比方说是第五个用户。对不对,当然在这的话呢,我们是一个delete请求对吧?啊,是一个delete请求啊,然后呢。
18:05
我直接send,那你就会发现对吧,删除了一个用户,那我如果我再去调用这个get all users,呃,这样的一个get请求的话呢,你就会发现诶。只剩下两个用户了,对吧?我刚才新增的那个用户呢,已经删除了,呃,当然他不只是说在后端删除,他肯定是在呃数据库里边,对吧,也把对应的这个数据呢,已经删除掉了,好,那这个是删除用户,当然我们还需要其他的一些API,那就是比如说根据用户ID获取角色ID这样的一个API,对吧?这样的1API我们也也需要来写一下,那我们怎么来写呢?首先它是一个get请求,对吧?那么这个get请求的话呢,那就是get role ID by user ID对吧?然后呢,我们还是一个路径参数user ID,然后public result对不对?当然你返回的这个角色ID呢,它是个long类型的,所以说我们result泛型的是long类型,Get role ID by user ID对吧?然后呢,它是一个路径参数,那这个路径参数的话呢,就是pass variableable long user ID对吧。
19:21
好,然后接下来的话呢,我们就是return result of2版success。然后呢,User row service.get row ID by user ID,好,那这样的话,我们这个API就写好了对吧?呃,其实基本上呃写API的方式都差不多对吧?你可以看到它实际上为什么我们说后端的很多工作他很多都是cardd呢?其实你写到这儿的话,你也应该大概呃可以明白一点对吧?那么还有的话呢,就是呃为用户分配角色对吧?为用户分配角色呃,当然这个的话呢,由于你分配操作的话呢,它实际上是需要修改数据库的,呃,所以说一般来说的话呢,我们这个的话呢,就是一个post请求啊,Sign role to user对吧?为用户分配角色public result,我们的返回类型还是一个stream吧,然后a wrong to user。
20:34
好,然后呢,我们由于它是个POS请求,所以说我们在这里面的话呢,我们还是一个请求体对吧,一个Jason格式请求体,这个请求体呢,会被序列化成一个U肉这样的一个病,这样的一个类,对吧?啊就像我们刚才在新增用户那里演示的一样,好,然后呢,我们在这的话呢,就是user service点。ADD user ID roll ID relationship对吧?然后在这的话就是user弱点get user ID以及user roll.get roll ID对吧?那这样的话呢,我们就把一对user ID和角色ID呢,给它写到数据库里边去了,对吧?我们调用了上面的这个,呃,服务呢,写入数据库,写入数据库以后呢,我们再向前端返回一个什么呢?返回一个200这样的一个操作对吧?然后呢,这个是分配角色成功对吧,我们就来写这样的一个字符串就可以了,好OK,那这样的话呢,我们的用户的控制器,呃,基本上就算写完了对吧?所以说大家从写到这儿的话呢,你就会发现说我们的user b对吧,或者说我们的病,Java病这样的类呢,主要是来定义,呃,就是说。
21:56
我们的这个病的类呢,和数据库的表的一个映射,然后呢,Service呢,我们主要是对数据库进行测查感,而控制器或者说controller呢,它主要是用来接收前端的,对吧,针对各种URL的请求。
22:13
对吧,那么接收请求以后呢,把请求的不管是请求体也好,还是路径参数也好,给他解析出来,然后调用服务对数据库进行增删查改。对吧?对数据会进行查增删查看,然后呢,为前端返回一些,呃,就是说前端需要的数据对吧,当然就是说你这个需要的数据的话呢,呃,可能前端和后端的话呢,需要大概的商量一下,对吧?当然最好就是说你自己也能够,呃就是编写前端的代码,那这样的话,呃就会更方便一点,好,我们接下来呢,我们写角色的控制器对吧?我们接下来我们写角色的控制器,那这个角色的控制器呢,那就是roll controller,对吧,Controller。啊,那么我们这个角色的控制器的话呢,其实它也是比较类似的,呃,当然首先它也是一个呃,Rest这样的一个控制器,对吧,Rest这样的控制器,那其次的话呢,呃,我们的这个request mapping对吧,也就是说它所处理的URL的开头是什么呢?是啊,In弱对吧,这样的一个开头。
23:25
也就是当你访问local host冒号8080斜杠命斜杠rule的时候呢,那么spring boot呢,就会自动的把这个请求呢路由到这个控制器来让这个控制器进行处理,那接下来我们先编写第一个API呢,就是获取所有角色的这样的一个API,对吧?当然它是一个呃,Get请求了对吧?那就是get or Rose啊,然后呢,Public result list,它返回的是一个row这样的一个类型的列表,对吧,Get all Rose,然后呢,Return result.of200success对吧?Row service.get or Rose哎,这样的话我们这个就写好了对吧?这样我们这个就写好了啊,当然你也可以使用postman或者使用浏览器呢,呃。
24:25
进行一个测试对吧?呃,当然由于它和user controller,或者说用户的这个控制器呢,呃,非常非常相似,所以说我们这里边的话呢,我们就嗯不再去对吧?呃一个一个把这些API都测试一下,因为大家我相信,因为之前应该也有一些spring boot的这样的知识,所以说呃理解起来应该不是太复杂,好接下来的话呢,就是根据角色ID删除角色对吧,那么它自然就是一个delete map,好,呃,Delete row row ID好,然后在这的话,Public result返回的是一个string,对吧,然后delete rule by ID。
25:13
OK,当然我们在这的话呢,还是一个路径参数,Pass variable,对吧,Long role ID,然后在这的话呢,我们就是一个肉service.delete row。对吧,根据角色ID把它从数据库里面删了,然后再给前端返回一个呃这样的一个结果,对吧?删除角色成功,好,那这是第二个API啊,那第三个API呢,就是添加新角色的这样的一个API了,对吧?啊,当然一看到添加的话呢,我们基本上就知道它是一个post的请求,对吧?那么这个post请求的URL呢,是ADD若对吧,其实和添加呃用户的这样的代码呢,其实并没有什么太大的区别,对吧?Public result string。
26:15
ADD row,然后呢,Request的body string role name对吧,我们。接收的参数呢,是一个用户名对吧,或者说是一个角色名,呃,然后在这的话呢,我们就是一个roll service.add的弱内对吧,那这样的话呢。就往数据库里面写了一个新的角色进去,那写了一个新的角色进去以后呢,我们继续向前端返回结果,对吧?继续向HTP请求呢,返回结果添加新角色成功,好,那这样的话呢,添加新角色的这样的一个功能呢,我们就也已经实现了,对吧?呃,那么除了添加新角色以外呢,我们还可以还需要实现对吧?比如说根据角色ID获取菜单。
27:17
好,那么它由于是一个获取这样的一个需求,所以说它当然也是一个get请求,对吧?当然也是一个get请求,其实写这个,呃,就是说后端的话呢,它不同公司可能有不同的风格,可能有的公司来讲的话呢,他就是说呃,所有的请求,不管你是获取数据也好,还是修改数据也好,还是删除数据也好,全部是post请求,对吧,他也有这么做的,对不对,这样其实也是可以的,呃,那么就是你怎么样做都有理由,对吧?就是说如果我们说是把获取数据就是get请求。添加数据就是POS请求,删除请求就是delete请求,对吧,那这个的话呢,呃,其实它是很符合rest API的这样的一种设计风格,呃,但是说。
28:05
一所有的请求全部是post请求的话啊,那它有什么样的好处呢?那么它的好处就是对吧,我们呃,就是说如果你加深学习的话,你可能会知道说这个get请求和POS请求它区别是什么,对吧?那么get请求呢,我们的浏览器会缓,呃,我们会缓存这个结果对吧?浏览器缓存这个结果,但是POS的请求。它是禁止缓存的,对不对,也就是说你POS的请求呢,一定能保证拿到最新的数据,对不对,他没有缓存的干扰,所以说这个就是有些公司它所有的请求,呃,一律使用post请求实现的,呃,这个原因对吧?当然这个其实无所谓的,呃你到了公司里面,你按照呃他的这个要求去做就可以了,好根据角色获得菜单,当然这个菜单其实就是对不对权限列表。
29:03
其实就是权限列表,所以说这个哎,我们get permissions by RO ID对吧,然后呢,这里边的话呢,我还是一个,呃,就是说路径变量long类型。然后呢,若ID好,然后接下来的话呢,我在这边return result.of200success,然后呢,Role permission service.get permissions by row ID,对吧?我们调用这个服务就可以了,呃,就可以从数据库里面取出数据来,然后包装到result里面进行返回,对吧?然后还有一个API呢,就是为角色分配权限的这样的一个API对吧?呃,当然在这里面你分配权限你肯定要涉及到往数据库里面去添加数据对吧?呃,实际上就是为角色权限表里面添加数据啊,那当然它就是一个POS请求了,Ass science permission to RO对吧?为角色分配权限public result string,然后呢,Assign permission。
30:19
To弱,然后呢,我们这个的话,POS请求的话呢,那它就是一个呃在请求体里边对吧,包含的数据呃过来的,也就是说它实际上是把请求体发送到了后端,呃然后呢,我们给它序反序列化成一个role permission这样的一个呃就是说并这样的一个类对吧?所以说你如果想要让请求体呃的这样的一个Json数据结构正确的序列化,反序列化成。Role permission这样的一个Java对象的话呢,呃,你要保证它的字段名对吧,必须是一样的,好,然后呢,我们调用role permission service里边的ADD role permiss这样的一个API,对吧?那么这个API的话呢,它的第一个参数就是我们的角色ID对吧?那么第二个参数什么呢?第二个参数就是哎,权限ID组成的列表啊,当然就是说前端它发过来的数据是什么呢?它发过来的数据实际上是个字符串对吧?那么这个字符串的话呢?呃,当然它这个字符串里边呢,它包含了一些,呃,就是说比如说权限ID对吧,12345啊这样的一个,实际上它前端发过来的呢,是一个字符串,这也是为什么我的这个role permission这样的一个,呃,就是说permission ids对吧,权限ID的列表字。
31:50
图串呢,呃,它是一个string类型的啊,当然在这的话呢,但是我们的这个API你再往里添加的时候呢,我这是一个弱ID,而这是一个permission ids,它是一个long类型组成的列表,对吧?所以说我们需要把这个字符串对吧,给它转成Java的这样的一个列表。
32:14
然后那么怎么转呢?那么我们就直接使用对吧,这个链式API对不对?呃,或者说使用这个Java里面的流式API对吧。A race点对不对?好,然后呢,在这的话呢,是role permission.get permission ids,你要注意现在返回的它是一个字符串,然后呢,我们使用逗号进行切割,那么切割完以后呢,对吧?当然你切割完呃切割出来以后呢,这个肯定呃就是说还是不算完的对吧,这个肯定还是不算完的啊,那么就是说你切割完以后呢,那你接下来你要做的事情是什么呢?你接下来要做的事情就是呃要把呃这个。
33:05
流对吧,因为我们现在切割完以后,流里边它每一个都是一个呃,字符串对吧,你需要把流里边的每一个元素呢,都给它转成什么呢?呃,都给它转成long类型的数据对吧?好,我们点maplo,然后把它转成一个列表就可以了。对吧,所以说我们这个链式API呢,其实你可以看到它非常方便我这个一句写下来呢,对吧,就把这个一逗号二逗号三逗号四逗号五这样的一个字符串呢,就转成了一个Java里面的列表,OK,好,那这样的话呢,我们就已经给角色呢分配的权限,然后呢,我们return一个result.of200success对吧,然后呢,是分配角色成功啊,然后加一个呃分号符,OK。
34:00
那角色的控制器的话呢,我们也已经写完了,对吧?啊,当然你就说你要想对这个权限呢,进行一个更细致的控制,对不对你进行一个更细致的控制的话,你还可以呃,针对权限来写一个控制器,对吧,你还可以针对权限来写一个控制器好。呃,当然我们实际上针对权限控制器呢,我们就不写了,因为我们在前端并没有暴露出来,呃,对权限,呃,这个表的一个操作的权限对吧?呃,或者说你操作的权利对不对?但是我们还需要写一个什么样的控制器呢?那就是用来登录和登出的这样的一个控制器,对吧?啊,那么这个控制器的名字呢,就叫做index controller对吧?实际上这个index.hml经常作为我们前端的首页来出现的,对吧?当然它还是一个rest controller,然后呢,我们的request mapping,也就是说它的呃这样的一个URL什么呢的M斜杠index对吧?好。
35:05
然后呢,首先是一个登录API的实现。对吧,那你登录的话呢,你需要输入用户名和密码,然后传到spring boot上来,呃,那自然的话呢,它是一个POS请求对吧?那这个POS请求的话呢,是一个login吧,它的URL public result string,对吧?然后呢,我们是一个login方法,然后他的这个请求题里边呢,这个request的body呢,对不对,我们会把它序列化成一个user这样的一个类型,对吧,User这样的一个类型,也就是说实际上呃,你这个要post的数据呢,就是用户名和密码对吧?呃,用户名和密码好,然后在这的话呢,我们先把这个使用user service来做什么呢?来根据你前端传过来的用户名对吧?根据前端传过来的用户名在数据库中查。
36:10
啊,寻用户信息对吧?这是第一步,因为你查不出用户信息来,这就说明没有这个用户啊,那我就直接给他返回对不对啊,用户不存在对吧?直接给他返回用户不存在,比方我在这里边,如果user不等于now,那这说明我们查到了这个数据对吧?那如果它user等于now呢?那这说明我们在数据库里面没有查到这个用户,那你没有查到这个用户的话呢,那我返回的自然就是,呃,当然也是280,然后呢,费用对吧?然后呢,用户不存在对吧?因为你在数据库里面没有查到这个用户呀,好,然后呢,如果查到这个用户以后,我们还要校验一下密码,对不对,校验密码,那么怎么去校验密码呢?那就是。
37:02
我们将前端传过来的密码进行MD5加密,然后和数据库里边M第五加密过的这个字符串是否相等相等。如果相等,说明他用户。名和密码输对了对吧,那这个就是校验密码,那在这儿的话呢,就是如果EMD5。点encrypt对吧,他对谁进行加密呢?前端传过来的密码对不对。然后呢,点ES user点盖发做的对吧?这个是数据库里边的密文密码,也就是说如果我们前端传过来密码经过MD5加密以后,不等于数据库里边用户的密码,那我们返回什么呢?当然我们返回的还是一个result.of200对吧?Success。对不对,当然这个不应该是success啊,这个可能应该是一个fail对不对,那这个的话就是密码错误,因为我们现在明显是查到有这个用户,但是呃,他的密码不对,对吧?啊,当然就是说如果他的密码也输入正确的话呢,那么我们怎么办呢?我们的做法就是首先为登录的用户生成token令牌,对吧,万尔token等于哎,这个时候我就想起来我们的j w helper.create对吧,当然这这个JWT啊,我们来看一下这个g wt helper。
38:45
对吧,Create token对吧,我们就可以调用这个方法了,好。OK,那么在这的话呢,是一个点create token。
39:01
对吧,然后呢,这个里面我们要传入的是user.get ID以及user点。Get you name对吧?当然你在这里的话,你会发现它爆红了,对吧?我们看一下为什么爆红对吧?那么这是因为。Create token呢,它并不是一个public的,对吧,我们在这边可能当时敲的时候呃,没太注意对吧,所以说在这的话呢,它是一个public好。啊,那这样就没问题了,对吧,这样就没问题了,OK,那在这的话呢,我们生成了未登录的用户呢,生成了一个新的token,然后我们就可以对吧,将con返回给前端对不对,那就是return result.of对吧?200SUCCESS token哎,我们直接给他返回给前端就可以了,好,那到现在为止呢。
40:02
我们就已经把用户管理模块的所有的控制器都写上,就是这个模块实际上我们就已经完成了,对吧?那么接下来的话呢,我们就要用我们的前端页面呢,来测试一下我们写的呃接口有没有问题对吧?呃,那在测试过程中呢,我们还会呃大概的来讲解一下,就是说前端里面那些代码对吧?啊当然就是说由于大家呃将来写代码的重点肯定也不是写前端,所以说我们并不会说是把前端的代码,呃也呃一行一行的敲一遍对吧,也一行一行的敲一遍。
我来说两句