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;
}
}