Java项目-苍穹外卖-Day02

完善用户登陆功能

就对密码进行md5加密处理
Java项目-苍穹外卖-Day02_第1张图片

Java项目-苍穹外卖-Day02_第2张图片
1.改数据库内部的密码,改成md5加密后的
2.改Service的逻辑,将传过来的进行md5加密后再比较(controller是发令牌,和返回VO对象那逻辑)
Java项目-苍穹外卖-Day02_第3张图片
先更新数据
Java项目-苍穹外卖-Day02_第4张图片
如果不改java代码进行登陆,肯定会失败,顺便看看我们的异常机制
我们new了一个我们建的异常
这里直接是传了一个常量消息
Java项目-苍穹外卖-Day02_第5张图片
全局异常捕获类
会在日志输出对应的异常消息
并且会把这个消息封装到Result返回给前端
Java项目-苍穹外卖-Day02_第6张图片
这就是我们定义的消息常量类
Java项目-苍穹外卖-Day02_第7张图片
现在我们更改一下Java的逻辑代码
这样即可
Java项目-苍穹外卖-Day02_第8张图片

导入接口文档

就将我们的接口文档导入接口管理平台方便查阅
实际开发接口文档设计是很复杂的,需要多次开会商讨等
前后端分离开发的流程
Java项目-苍穹外卖-Day02_第9张图片
导入线上的接口管理平台
我这里用的是Apifox
Java项目-苍穹外卖-Day02_第10张图片

Swagger

这个工具可以根据接口文档生成在线接口调试文档
代替Postman
但直接使用Swagger还是比较繁琐
所以我们需要用到Knife4j框架
Java项目-苍穹外卖-Day02_第11张图片
Java项目-苍穹外卖-Day02_第12张图片
这些配置都是一些固定代码
记住每个是干什么的进行
apiInfo就是设置生成接口文档的标题,描述,版本
然后docket扫描我们需要生成接口文档的包(一般是controller)
扫描一定要正确

Java项目-苍穹外卖-Day02_第13张图片
设置静态资源映射
也就是生成接口文档的指定路径
这个是一定要设置的
Java项目-苍穹外卖-Day02_第14张图片
有点牛的
就是这是直接生成到对应的网页同时也部署到服务器上
比如我们的网页端口不是8080吗
然后这个是在脉冲项目运行前会输出一遍
我们只需要用服务器访问
https://localhost:8080/doc.html
这就是Knife4j框架生成出来的
Java项目-苍穹外卖-Day02_第15张图片
在这个界面进行接口测试
Java项目-苍穹外卖-Day02_第16张图片
Java项目-苍穹外卖-Day02_第17张图片

常用注解

Java项目-苍穹外卖-Day02_第18张图片
Java项目-苍穹外卖-Day02_第19张图片
Java项目-苍穹外卖-Day02_第20张图片
对应的更改产生的效果
用椭圆标出的部分就是
Java项目-苍穹外卖-Day02_第21张图片

新增员工代码开发

初步开发

controller
Java项目-苍穹外卖-Day02_第22张图片
Service
Java项目-苍穹外卖-Day02_第23张图片
Mapper
没有变,因为我导入了一个Mybatisplus的依赖,然后就直接用哪个现成方法了
需要注意的是,需要在对应的employee类上设置id生成策略为IdType.AUTO,进行自增,还有用父工程进行统一依赖版本管理就可以
Java项目-苍穹外卖-Day02_第24张图片
Java项目-苍穹外卖-Day02_第25张图片

调试

用Swagger进行调试,开发阶段用Swagger,设计阶段用接口平台
注意:第一次请求会失败,因为我们配置了拦截器进行JWT令牌的拦截,需要我们在请求头上加上对应的token即JWT令牌,怎么获取呢?看下图

Java项目-苍穹外卖-Day02_第26张图片
配置全局参数

Java项目-苍穹外卖-Day02_第27张图片
然后进行员工新增的调试
注意:我们用mp的话,insert是有什么参数就会insert什么参数(会直接指定id),所以我们直接把id删了就行,不像mybatis是自己定义的,只会添我们想要的参数(就算指定id但是不会添加对应值,相当于null,还是自增)
Java项目-苍穹外卖-Day02_第28张图片
测试结果
Java项目-苍穹外卖-Day02_第29张图片

完善

Java项目-苍穹外卖-Day02_第30张图片
问题1:用全局异常处理器进行处理(因为后面的更改也可能遇到这个问题)
根据报错的信息Duplicate entry即重复的键值对来筛选错误为用户名冲突错误
然后找对应的重复字符串返回错误信息即可
Java项目-苍穹外卖-Day02_第31张图片
问题2:获取对应操作用户的ID
怎么获取呢,看传过来的内容全是关于新增员工的数据,这些数据和我们操作员工没有关系
然后另寻他路,我们就用用请求头中的JWT令牌
Java项目-苍穹外卖-Day02_第32张图片
在JWT令牌拦截器中获取过对应的ID
Java项目-苍穹外卖-Day02_第33张图片
那么如何传递给我们的save方法呢?
涉及到一个新的技术点

ThreadLocal

先理解一下
每一次请求都是同一个线程,比如一次请求,拦截器,controller,service
都是同一个线程
同一个线程,信息当然是共享的,我们通过ThreadLocal来进行信息共享,然后恰好我们在拦截器会用到JWT令牌进行校验
Java项目-苍穹外卖-Day02_第34张图片
定义一个工具类
来创建我们的ThreadLocal对象,存储一些方法
一般使用这个类都是进行一个简单的封装比如这个BaseContext
Java项目-苍穹外卖-Day02_第35张图片
在我们的拦截器增添一行代码
Java项目-苍穹外卖-Day02_第36张图片
Java项目-苍穹外卖-Day02_第37张图片
这样就ok了
在这里声明一下为什么这个ThreadLocal是同一个
首先作为静态变量创建对象,肯定是一个对象
这个对象可以为不同的线程来生成多个存储空间
线程A作为一个空间,线程B就是另一个空间推测
Java项目-苍穹外卖-Day02_第38张图片

你可能感兴趣的:(项目记录,java,开发语言)