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