问题分析:
由于数据库中设置username唯一,所以程序还存在一个问题,当我们在新增员工是输入的账号已经存在,此时程序会抛出异常,因此我们的程序需要进行异常捕获,通常有两张方式:
解决方案:
1.在Controller方法中加入try,catch进行异常捕获
try{
employeeService.save(employee);
}catch(Exception ex){
R.error("新增员工失败");
}
return R.success("新增员工成功");
2.使用异常处理器进行全局异常捕获
/**
* 全局异常处理器
*/
@ControllerAdvice(annotations = {RestController.class,Controller.class})
@ResponseBody
@Slf4j
public class GlobalExceptionHandler {
/**
* 异常处理方法
* @return
*/
@ExceptionHandler(SQLIntegrityConstraintViolationException.class)
public R<String> ExceptionHandler(SQLIntegrityConstraintViolationException ex){
log.info(ex.getMessage()); // Duplicate entry 'zhangsan' for key 'idx_username'
//判断异常是否包含Duplicate entry
if(ex.getMessage().contains("Duplicate entry")){
// Duplicate entry 'zhangsan' for key 'idx_username' 将异常信息空格分隔转为数组
String[] s = ex.getMessage().split(" ");
String message = s[2] + "已存在";
return R.error(message);
}
return R.error("未知错误");
}
}