SpringBoot项目开发(十九):全局异常处理

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zhuyu19911016520/article/details/81865810

团队写的代码偶尔会有漏洞的地方,用户访问报错后直接把一大堆错误信息呈现给用户是不太友好的,为了更友好,往往会捕获全局异常,统一跳转到一个友好的错误页面

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

猜你喜欢

转载自blog.csdn.net/zhuyu19911016520/article/details/81865810
今日推荐