欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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 ,结果如下:
SpringBoot项目开发(十九):全局异常处理

再看Ide的Console控制台的输出信息,打印出异常时间、请求地址等等信息
SpringBoot项目开发(十九):全局异常处理

通过全局异常,把异常信息统一保存到监控系统中,通过监控系统可以很好的判断系统是否健康运转,及时修复bug

下篇 Caffeine本地缓存

相关标签: 全局异常处理