程序存在的问题:
•第一个问题:
录入的用户名已存在,抛出异常后没有处理
•第二个问题:
新增员工时,创建人
id
和修改人
id
设置为了固定值
第一个问题解决:
通过全局异常处理器来处理
在该类里编写:
/**
* 处理SQL异常
* @param ex
* @return
*/
@ExceptionHandler
public Result exceptionHandler(SQLIntegrityConstraintViolationException ex){
//用户名已存在写法
String message = ex.getMessage();
if (message.contains("Duplicate entry")){
String[] split = message.split(" ");
String username = split[2];
String msg = username + MessageConstant.ALREADY_EXISTS;
return Result.error(msg);
}else {
return Result.error(MessageConstant.UNKNOWN_ERROR);
}
}
第二个问题解决:
再借助ThreadLocal ,初始工程中已经封装了 ThreadLocal 操作的工具类,如下:
package com.sky.context;
public class BaseContext {
public static ThreadLocal<Long> threadLocal = new ThreadLocal<>();
public static void setCurrentId(Long id) {
threadLocal.set(id);
}
public static Long getCurrentId() {
return threadLocal.get();
}
public static void removeCurrentId() {
threadLocal.remove();
}
}
在拦截器中解析出当前登录员工id,并放入线程局部变量中: