SpringBoot 全局異常捕獲
用來捕獲全局異常
@ControllerAdvice
public class GlobalDefultExceptionHandler {
Logger log = LoggerFactory.getLogger(getClass());
//聲明要捕獲的異常 自定義 異常
@ExceptionHandler(value = GlobalMyException.class)
@ResponseBody
public R defultExcepitonHandler(HttpServletRequest request, GlobalMyException e) {
log.error("請求" + request.getRequestURL() + "wangmx異常:", e);
return R.errorMassgae(500,e.getMessage());
}
//空指針
@ExceptionHandler(value = NullPointerException.class)
@ResponseBody
public R handleNullPointerException(HttpServletRequest request, NullPointerException e) {
log.error("請求" + request.getRequestURL() + "空指針:", e);
return R.errorMassgae(501,"空指針");
}
//數組越界
@ExceptionHandler(value = ArrayIndexOutOfBoundsException.class)
@ResponseBody
public R handleArrayIndexOutOfBoundsException(HttpServletRequest request, ArrayIndexOutOfBoundsException e) {
log.error("請求" + request.getRequestURL() + "數組越界:", e);
return R.errorMassgae(502,"數組越界");
}
//算數異常
@ExceptionHandler(value = ArithmeticException.class)
@ResponseBody
public R handleArithmeticException(HttpServletRequest request, ArithmeticException e) {
log.error("請求" + request.getRequestURL() + "算數異常:", e);
return R.errorMassgae(503,"算數異常");
}
//類型轉換異常
@ExceptionHandler(value = ClassCastException.class)
@ResponseBody
public R handleClassCastException(HttpServletRequest request, ClassCastException e) {
log.error("請求" + request.getRequestURL() + "類型轉換異常:", e);
return R.errorMassgae(504,"類型轉換異常");
}
//Io
@ExceptionHandler(value = IOException.class)
@ResponseBody
public R handleIOException(HttpServletRequest request, IOException e) {
log.error("請求" + request.getRequestURL() + "IO異常:", e);
return R.errorMassgae(601,"IO異常");
}
//sql
@ExceptionHandler(value = SQLException.class)
@ResponseBody
public R handleSQLException(HttpServletRequest request, SQLException e) {
log.error("請求" + request.getRequestURL() + "SQL異常:", e);
return R.errorMassgae(701,"SQL異常");
}
}
自定義異常類
/**
* 指定異常
*/
public class GlobalMyException extends RuntimeException{
private Logger logger = LoggerFactory.getLogger(getClass());
//自定義錯誤碼
private Integer code;
private String errorMessage;
//自定義構造器,只保留一個,讓其必須輸入錯誤碼及內容
public GlobalMyException(String errorMessage) {
super(errorMessage);
logger.error(errorMessage);
}
//自定義構造器,只保留一個,讓其必須輸入錯誤碼及內容
public GlobalMyException(int code, String msg) {
super(msg);
this.code = code;
}
public Integer getCode() {
return code;
}
public void setCode(Integer code) {
this.code = code;
}
}