新增员工
需求分析
代码开发
根据新增员工接口设计对应的DTO
DTO用来封装前端提交来的数据,前端提交来的是 JSON 数据
当然也可以使用实体类
当前端提交的数据和实体类中的对应的属性差别较大时,建议使用DTO封装数据
在employeeController加入save函数
{}是占位符
方法里已经加入路径
选中EmployeeServiceImpl,ctrl+o
完善save
调用持久层
开发结束
功能测试
通过接口文档测试
前后端分离开发的时候,有可能后端已经开发好这个功能但是前端没有开发好,所以一般采用接口文档测试
首先重新启动项目(调试状态启动)
打开接口文档进行测试,发现直接返回了401
这个是由于interceptor
我们加入断点,再次测试
逐步调试,发现token为null,显然不能校验通过
抛出异常
那么如何在接口文档中添加JWT令牌
我们可以选择在接口文档中的员工登录,得到一个合法的token
接下来,选择文档管理中的全局参数设置
为啥叫token呢,这是由配置文件决定的
配置好全局参数后,打开新增员工,发现多了一个请求头
继续测试
发现,,额数据库没有连接
如何在idea中连接数据库
选择右侧的datebase选择datesource
参考文章
Unable to resolve table ‘XXX‘ 的解决方案_NorburyL的博客-CSDN博客
通过前后端联调测试
打开localhost
后端打断点
总结
代码完善
目前存在的问题是:
录入的用户名已存在,抛出异常后没有处理
新增员工时,创建人和修改人id设置为了固定值
录入的用户名已存在,抛出异常后没有处理
我们尝试重复录入
后端抛出异常
复制一下类名 SQLIntegrityConstraintViolationException
找到全局的异常处理器
前端进行测试
新增员工时,创建人和修改人id设置为了固定值
也就是如何获取登录用户的id呢?
员工登陆成功以后会生成JWT令牌并响应给前端
后续请求中,前端会携带JWT令牌,通过JWT令牌可以解析出当前登录员工的id
我们希望将这个id传给我们的save(新增员工)
这儿我们需要用到一个知识点,叫做ThreadLocal
ThreadLocal
这个东西并不是线程,而是线程的局部变量
ThreadLocal为每个线程提供一份单独的存储空间,具有线程隔离的效果,只有线程内才能取到对应的值,线程外不能访问
客户端每次发起的请求都会对应一个线程
在拦截器 preHandle 中已经解析出empID,将其放入共享空间
在save中取出empID
在前端
发现,已经解析出
然后继续执行到save,如果我们希望计算某个表达式的值,可以选中右键
点击Evaluate Expression
检查数据库