全局異常捕獲處理
對于系統進行全局的異常處理。
@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();
}
}