SpringBoot中可以定義全局異常類,不用在每一個接口使用try catch捕獲返回異常
一、注解含義
@ControllerAdvice 這是一個增強的 Controller。使用這個 Controller ,可以實現三個方面的功能:
- 1.全局異常處理
- 2.全局數據綁定
- 3.全局數據預處理
- 詳細使用方法
@ExceptionHandler指定捕獲的異常類型,執行指定方法
二、定義全局異常類
@ControllerAdvice
@Slf4j
public class GlobalExceptionHandler {
@ResponseBody
@ExceptionHandler(Exception.class)
public DataResult defaultGlobalException(HttpServletRequest request, Exception e) {
log(request, e);
return DataResult.failure("系統異常");
}
public void log(HttpServletRequest request, Exception exception) {
//換行符
String lineSeparatorStr = System.getProperty("line.separator");
StringBuilder exStr = new StringBuilder();
StackTraceElement[] trace = exception.getStackTrace();
// 獲取堆棧信息並輸出為打印的形式
for (StackTraceElement s : trace) {
exStr.append("\tat " + s + "\r\n");
}
//打印error級別的堆棧日志
log.error("訪問地址:" + request.getRequestURL() + ",請求方法:" + request.getMethod() +
",遠程地址:" + request.getRemoteAddr() + lineSeparatorStr +
"錯誤堆棧信息如下:" + exception.toString() + lineSeparatorStr + exStr);
}
}