《苍穹外卖》项目日记_Day2

前言:

今天回学校,准备开学了,这几天找找状态。

今日完成任务:

  • 员工管理相关接口
  • 菜品和套餐分类相关接口

今日收获:

​ 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
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值