SpringBoot项目开发(十九):全局异常处理
程序员文章站
2024-02-19 08:02:22
...
团队写的代码偶尔会有漏洞的地方,用户访问报错后直接把一大堆错误信息呈现给用户是不太友好的,为了更友好,往往会捕获全局异常,统一跳转到一个友好的错误页面
SpringMVC提供一个 HandlerExceptionResolver 接口,全局异常处理器实现此接口即可
1.新建一个全局异常处理类,GlobalExceptionResolver.java,实现HandlerExceptionResolver接口
@Component
public class GlobalExceptionResolver implements HandlerExceptionResolver{
private static SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:sss");
private static StringBuilder sb = new StringBuilder();
@Override
public ModelAndView resolveException(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) {
//错误信息
wirte("异常时间:"+ dateFormat.format(new Date()));
wirte("请求地址:"+ httpServletRequest.getRequestURL());
wirte("错误原因:"+ e.toString());
//详细异常
sb.setLength(0);
StackTraceElement[] error = e.getStackTrace();
for (StackTraceElement stackTraceElement : error) {
sb.append(stackTraceElement.toString()+"\n");
}
wirte("详细原因:"+ sb.toString());
//返回统一错误页面
return new ModelAndView("error");
}
//打印到控制台
void wirte(String msg){
System.out.println(msg);
}
}
以上同样适用于SpringMvc项目,只不过需要配置一个bean
<!--配置异常对象处理器 该类要实现HandlerExceptionResolver接口 -->
<bean class="com.zypcy.expend.interceptor.GlobalExceptionResolver"></bean>
2.新建统一错误页面 error.html ,展示一个 gif 的动画
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>您访问的页面报错啦</title>
</head>
<body>
<div style="text-align: center;">
<img src="/images/error.gif" style="width: 1366px;height: 768px;"/>
</div>
</body>
</html>
3.在控制器中创建一个action,手动写一个异常,没有异常返回index页面,发生异常后是否返回统一异常error页面
//测试全局异常
@RequestMapping("/testException")
public String testGlobalException(){
String str = null;
if(str.equals("123")){
}
return "index";
}
启动项目,访问 /testException ,结果如下:
再看Ide的Console控制台的输出信息,打印出异常时间、请求地址等等信息
通过全局异常,把异常信息统一保存到监控系统中,通过监控系统可以很好的判断系统是否健康运转,及时修复bug
下篇 Caffeine本地缓存
推荐阅读