SpringBoot项目开发(十九):全局异常处理_zhuyu19911016520-CSDN博客

沙海
沙海
沙海
1017
文章
2
评论
2021年4月28日12:05:55
评论
2 1849字阅读6分9秒
摘要

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

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

SpringBoot项目开发(十九):全局异常处理_zhuyu19911016520-CSDN博客

闪耀的瞬间
2018-08-20 16:12:01
SpringBoot项目开发(十九):全局异常处理_zhuyu19911016520-CSDN博客
527

SpringBoot项目开发(十九):全局异常处理_zhuyu19911016520-CSDN博客

收藏


分类专栏:
spring boot
java
SpringBoot 项目开发
文章标签:
全局异常处理

版权

SpringBoot项目开发(十九):全局异常处理_zhuyu19911016520-CSDN博客

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

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

以上同样适用于SpringMvc项目,只不过需要配置一个bean

<!--配置异常对象处理器  该类要实现HandlerExceptionResolver接口  -->
<bean class="com.zypcy.expend.interceptor.GlobalExceptionResolver"></bean>
12

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>
123456789101112

######3.在控制器中创建一个action,手动写一个异常,没有异常返回index页面,发生异常后是否返回统一异常error页面

    //测试全局异常
    @RequestMapping("/testException")
    public String testGlobalException(){
        String str = null;
        if(str.equals("123")){

        }
        return "index";
    }
123456789

启动项目,访问 /testException ,结果如下: SpringBoot项目开发(十九):全局异常处理_zhuyu19911016520-CSDN博客

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

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

下篇 Caffeine本地缓存

继续阅读
weinxin
资源分享QQ群
本站是一个IT技术分享社区, 会经常分享资源和教程; 分享的时代, 请别再沉默!
沙海
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: