项目踩坑之面试遇到的问题及解决

第一点:

问题

遇到的问题之:在实现后台管理端-账户操作的时候,添加员工的时候如果重复添加同一个员工,会触发一个数据库唯一约束异常,但客户端无法清晰的理解这个错误,所以我们就对新增员工的代码进行try catch,但同时带来一个问题,代码量一旦上来就不可行。

解决:

这里我们使用SpringAop思想实现全局异常拦截处理,从而对异常的统一处理。

当报错信息出现Duplicate entry时,就意味着新增员工异常了 所以,我们对异常类的方法进行一些小改动,让这个异常反馈变得更人性化 这个时候再来客户端试试,就会提供人性化的报错,非常的快乐~,更加人性化,体验更好。

实现代码:

java 复制代码
//@RestControllerAdvice包括了下面两行
@ControllerAdvice(annotations = {RestController.class, Controller.class})
@ResponseBody
@Slf4j
public class GlobalExceptionHandler {
 
    /**
     * 异常处理方法
     * @return
     */
    //捕获完整性约束违反异常(其实就是数据库唯一约束异常)SQLIntegrityConstraintViolationException
    @ExceptionHandler(SQLIntegrityConstraintViolationException.class)
    public R<String> exceptionHandler(SQLIntegrityConstraintViolationException ex){
        log.error(ex.getMessage());
 
        if(ex.getMessage().contains("Duplicate entry")){
            return R.error("唯一约束异常:"+exception.getMessage().split(" ")[2]+"已存在");
        }
 
        return R.error("未知唯一约束错误");
    }
}

这回再回到Controller,这时就不需要再来try catch这种形式了,不用管他,因为一旦出现错误就会被我们的AOP捕获。所以,不需要再用try catch来抓了

第二点

问题:

启用禁用员工账号,js主键丢失精度问题

只有管理员账号有禁用启用按钮:

前端如何判断当前用户是admin?缓存:local Storage里面

点击禁用后发送请求:

js丢失long精度问题

Long类型id是19位,而js只能处理17位数字,Long类型主键从前端传回后端丢失精度,导致传到后端的id和数据库id不一致:

解决方案:

实体类注解@JsonFormat

实现代码:

在员工的主键上面加上**@JsonFormat**

java 复制代码
  @JsonFormat(shape = JsonFormat.Shape.STRING)
    private Long id;
相关推荐
nice_lcj5201 分钟前
数据结构之树与二叉树:重点梳理与拓展
java·数据结构
毕设源码-钟学长1 分钟前
【开题答辩全过程】以 助学贷款管理系统为例,包含答辩的问题和答案
java
亓才孓3 分钟前
任意大小的整数和任意精度的小数的API方法
java
GalenZhang8884 分钟前
使用 Python SDK 将数据写入飞书多维表格
数据库·python·飞书·多维表格
云和数据.ChenGuang6 分钟前
GaussDB 期末考试题与面试题
数据库·opengauss·gaussdb·数据库期末试题
不屈的铝合金10 分钟前
SQL 语言概述与数据库核心前置配置了解
数据库·sql·mysql·约束·sql 语句分类·字符集配置·校对规则
萧曵 丶10 分钟前
可重复读(Repeatable Read)隔离级别下幻读产生的原因
数据库·sql·mysql
2501_9418752812 分钟前
从资源隔离到多租户安全的互联网工程语法构建与多语言实践分享
java·开发语言
xiaolyuh12322 分钟前
ThreadLocalMap 中弱引用被 GC 后的行为机制解析
java·jvm·redis
Antoine-zxt25 分钟前
MySQL宕机日志迷局破解指南:从前台启动到精准排错
数据库·mysql·adb