当前位置: 首页 > article >正文

外卖开发(二)开发笔记

外卖开发(二)开发笔记

  • 一、DTO
  • 二、自定义全局异常处理
  • 三、ThreadLocal存入、提取当前登陆用户的id
  • 四、日期格式化
    • 1、实体类属性上加入注解@JsonFormat
    • 2、在WebMvcConfiguration中扩展SpringMVC的消息转换器

一、DTO

数据传输对象(DTO)(Data Transfer Object),用于前端与controller层之间的数据交互。一般,前段提交的数据和实体类中对应的属性差别比较大是时,用DTO来封装数据。
在这里插入图片描述
在这里插入图片描述

二、自定义全局异常处理

当注册账号时,如果账号已经存在,需要我们进行全局异常处理。
我们在数据库中定义了账号的唯一性,所以在添加新账号时会抛出异常:Error updating database,java.sql.SQLIntegrityconstraintViolationException: Duplicate entry 'zhangsan' for key 'employee.idx_usernane'

在这里插入图片描述

针对这个问题,我们可以通过全局异常处理:

GlobalExceptionHandler.java

 	@ExceptionHandler
 	//SQLIntegrityconstraintViolationException: Duplicate entry 'zhangsan' for key 'employee.idx_usernane'

    public Result exceptionHandler(SQLIntegrityConstraintViolationException ex){
        //获取报错信息
        String message = ex.getMessage(); 
        //确定是因为账号已存在报的错误
        if(message.contains("Duplicate entry")){
           //将字符串通过空格分离,装入数组中,并提取第三个值,拿到前段输入的账号
            String[] split = message.split(" ");  
            String username = split[2];
            String mes = username + MessageConstant.ALREADY_EXISTS;
            return Result.error(mes); //返回异常提示
        }
        else {
            return Result.error(MessageConstant.UNKNOWN_ERROR);
        }
    }

三、ThreadLocal存入、提取当前登陆用户的id

当我们修改完之后,需要修改数据库中 update_user字段,我们就需要获取当前用户的id。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

员工登陆之后,如何获取id?ThreadLocal

在这里插入图片描述
在这里插入图片描述

工程中已经封装好了ThreadLocal操作的工具类。

在这里插入图片描述
既然每一次请求都会新建一个ThreadLocal,那么联想到,我们每次操作,都会被拦截器拦截,判断是否具有jwt令牌,以此做到登录校验,所以我们可以在拦截器中解析出员工ID,并加入到ThreadLocal,这样后续的操作中就可以根据ThreadLocal提取到id。

JwtTokenAdminInterceptor.java
在这里插入图片描述
获取当前用户ID

四、日期格式化

1、实体类属性上加入注解@JsonFormat

在这里插入图片描述

2、在WebMvcConfiguration中扩展SpringMVC的消息转换器

统一对日期进行格式化管理。

WebMvcConfiguration.java

 /**
     * 扩展消息转换器:处理日期格式
     * @param converters
     */
    @Override
    protected void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
        //创建一个消息转换器
        MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
        //需要为消息转换器设置一个对象转换器,对象转换器可以讲java对象序列化为json
        converter.setObjectMapper(new JacksonObjectMapper());
        //将自己的消息转化器放入容器中,并提高优先级。
        converters.add(0,converter);
    }

在这里插入图片描述


http://www.kler.cn/a/417213.html

相关文章:

  • 使用page assist浏览器插件结合deepseek-r1 7b本地模型
  • 算法与数据结构(删除有序数组的重复项)
  • c语言对应汇编写法(以中微单片机举例)
  • 【STM32系列】利用MATLAB配合ARM-DSP库设计IIR数字滤波器(保姆级教程)
  • 基础相对薄弱怎么考研
  • openssl 中 EVP_aes_256_gcm() 函数展开
  • 【论文阅读】 Learning to Upsample by Learning to Sample
  • 3D Gaussian Splatting综述 论文笔记
  • scala模式匹配
  • Qt 前置课程 QtNFC
  • Android.mk 和Android.bp 设置头文件的命令
  • 黑马2024AI+JavaWeb开发入门Day03-Maven-单元测试飞书作业
  • openharmony 下的 rtos虚拟化方案
  • 基础入门-Web应用架构类别源码类别镜像容器建站模版编译封装前后端分离
  • FinalShell工具数据备份升级、密码解密方法
  • dhcp服务
  • MFC音视频播放器-支持电子放大等功能
  • Monitor 显示器软件开发设计入门二
  • 基于Java Springboot门诊预约之鼻护灵微信小程序
  • 【NLP高频面题 - LLM架构篇】旋转位置编码RoPE相对正弦位置编码有哪些优势?
  • OpenMP出现Stack Overflow及其疑问
  • 前端如何获取unpkg的资源链接
  • 《Vue 服务器端渲染(SSR):优化性能与 SEO》
  • 蓝桥杯模拟题不知名题目
  • MySQL - 性能优化
  • docker迁移gitlab的时候 遇到的一些问题