全局异常捕获处理
对于系统进行全局的异常处理。
@RestControllerAdvice
public class AppExceptionHandler {
private Logger logger = LoggerFactory.getLogger(getClass());
/**
* 处理自定义异常
* AppException 自定义 运行时异常
* ResultInfo 自定义统一返回类,用户前后端分离
*/
@ExceptionHandler(AppException.class)
public ResultInfo handleAppException(AppException e){
ResultInfo r = new ResultInfo();
r.put("code", e.getCode());
r.put("msg", e.getMessage());
logger.error("<全局异常> - [用户自定义异常] code:{}, msg:{}", e.getCode(), e.getMsg(), e);
return r;
}
@ExceptionHandler(NoHandlerFoundException.class)
public ResultInfo handlerNoFoundException(Exception e) {
// logger.error(e.getMessage(), e);
logger.error("<全局异常> - [用户自定义异常] code:{}, msg:{}", 404, "路径不存在,请检查路径是否正确", e);
return ResultInfo.error(404, "路径不存在,请检查路径是否正确");
}
@ExceptionHandler(DuplicateKeyException.class)
public ResultInfo handleDuplicateKeyException(DuplicateKeyException e){
//logger.error(e.getMessage(), e);
logger.error("<全局异常> - [用户自定义异常] code:{}, msg:{}", 1001, "数据库中已存在该记录", e);
return ResultInfo.error("数据库中已存在该记录");
}
@ExceptionHandler(AuthorizationException.class)
public ResultInfo handleAuthorizationException(AuthorizationException e){
//logger.error(e.getMessage(), e);
logger.error("<全局异常> - [用户自定义异常] code:{}, msg:{}", 403, "没有权限,请联系管理员授权", e);
return ResultInfo.error("没有权限,请联系管理员授权");
}
// Exception 异常放在最后来处理
@ExceptionHandler(Exception.class)
public ResultInfo handleException(Exception e){
logger.error(e.getMessage(), e);
return ResultInfo.error();
}
}