前言:
今天回学校,准备开学了,这几天找找状态。
今日完成任务:
- 员工管理相关接口
- 菜品和套餐分类相关接口
今日收获:
1.熟练掌握接口开发步骤:基本上写一个接口都分为四步:1)查看需求接口文档2)开发功能 3)测试功能 4)完善功能。
2.在实现新增员工接口时,使用DTO对象对前端传递过来的数据进行封装。当使用BeanUtils工具类对属性进行copy。会把对应的字段的属性进行自动赋值。
当我们添加的用户名已经存在的时候会报错,这个时候我们需要添加全局异常处理器,对该类异常进行统一处理。下面在GlobalExceptionHandler类中贴一张代码。

3.实现新增员工接口时,需要设置当前操作者的id.这个地方使用BaseContext工实现,获取当前线程ID,因为每次请求都是一个单独的线程, 添加员工发送请求 会有两次处理 先进行jwt令牌校验 再调用controller。那我们就想如何在同一个线程中对数据进行共享传递数据?可以通过ThreadLocal设置、获取当前请求的id。这种在一个线程中,横跨若干方法调用,需要传递的对象/数据,我们通常称之为上下文(Context),它是一种状态,可以是用户身份、任务信息等。BeseContext底层其实就是封装好了这个ThreadLocal。

对前端传递过来的密码,通过md5算法加密之后存入到数据库中,如上图。
ThreadLocal
本地线程变量,ThreadLocal中填充的的是当前线程的变量,该变量对其他线程而言是封闭且隔离的,ThreadLocal为变量在每个线程中创建了一个副本,这样每个线程都可以访问自己内部的副本变量。通俗的来说,ThreadLocal为当前线程创建了一个副本,这个副本里面可以单独存一份变量并且单独修改和使用,不被其他线程所共享,是隔离的。
每个线程都会存储ThreadLocal对象的备份。ThreadLocal变量是存在ThreadLocalMap,为 ThreadLocal的一个静态内部类,里面定义了Entry来保存数据,那么既然是map,就会有键值对的结构,键的位置存的就是我们的ThreadLocal对象,而值存储的就是通过set方法存入的那个值.例如这一句代码:local.set( i);那么存到这个线程中的ThreadLocalMap的一个entry中,键和值就分别是 local:i
下面是ThreadLocalMap源码
// 内部类ThreadLocalMap
static class ThreadLocalMap {
static class Entry extends WeakReference<ThreadLocal

最低0.47元/天 解锁文章
867

被折叠的 条评论
为什么被折叠?



