《Springboot极简教程》系统异常全局统一处理:@ControllerAdvice plus @ExceptionHandler统一异常处理代码实例运行

统一异常处理

系统有一个统一异常处理的功能,可减少重复代码,又便于维护。

用@ControllerAdvice和@ExceptionHandler两个注解来做异常的统一处理。

@ControllerAdvice:作用于所有@Controller标注的Controller类 @ExceptionHandler:作用于所有@RequestMapping标注的方法抛出的指定类型的异常。

代码实例

ExceptionHandlerAdvice.java

package com.restfeel.advice

import org.springframework.web.bind.annotation.ControllerAdvice
import org.springframework.web.bind.annotation.ExceptionHandler
import org.springframework.web.context.request.WebRequest
import org.springframework.web.servlet.ModelAndView


/**
 * Created by jack on 2017/3/30.
 *
 * 系统全局统一异常处理
 */
@ControllerAdvice
class ExceptionHandlerAdvice {
    @ExceptionHandler(value = Exception::class) //表示捕捉到所有的异常,你也可以捕捉一个你自定义的异常
    fun exception(exception: Exception, request: WebRequest): ModelAndView {
        val modelAndView = ModelAndView("jsp/error")//error页面
        modelAndView.addObject("errorMessage", exception.message)
        modelAndView.addObject("stackTrace", exception.stackTrace)
        return modelAndView

    }
}

error.jsp

<%--
  Created by IntelliJ IDEA.
  User: jack
  Date: 2017/3/30
  Time: 02:08
  To change this template use File | Settings | File Templates.
--%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@taglib uri="http://java.sun.com/jsp/jstl/functions"
          prefix="fn" %>
<%@ page language="java" contentType="text/html; charset=UTF-8"
         pageEncoding="UTF-8" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
    <jsp:include page="header.jsp"></jsp:include>
</head>
<body>
<jsp:include page="top-nav.jsp"></jsp:include>
<div class="col-sm-12">
    <h1>系统异常统一处理</h1>
    <h3>${errorMessage}></h3>
    <h2>Debug</h2>
    <a href="https://www.google.com/webhp?hl=zh-CN#safe=strict&hl=zh-CN&q=${errorMessage}"
       class="btn btn-primary btn-lg" target="_blank" id="Google">Google</a>
    <a href="https://www.baidu.com/s?wd=${errorMessage}" class="btn btn-info btn-lg"  target="_blank" id="Baidu">Baidu</a>
    <a href="http://stackoverflow.com/search?q=${fn:substring(errorMessage,0,100)}"
       class="btn btn-default btn-lg"  target="_blank" id="StackOverFlow">StackOverFlow</a>

    <h2>异常堆栈跟踪日志StackTrace</h2>
    <code>
        <c:forEach items="${stackTrace}" var="line">
            ${line}
        </c:forEach>
    </code>
</div>


<footer class="panel-footer rest-footer">
    <div class="footer-nav">
        <a href="/" target="_blank" hidefocus="true">RestFeel</a>
        |
        <a href="https://universsky.github.io/" target="_blank">光剑免费图书馆</a>
        |
        <a href="https://jason-chen-2017.github.io/Jason-Chen-2017/" target="_blank">博客</a>
        |
        <a href="#" target="_blank" hidefocus="true">微信公众号:ols-lightshadow</a>
    </div>
    <div class="copyright">RestFeel 2017-7017</div>
</footer>

<!-- JavaScript -->
<script data-main="js/main" src="js/libs/require/require.js"></script>

<script type="text/javascript">
    $(function () {
        $('#Google').click()
        $('#Baidu').click()
        $('#StackOverFlow').click()
    })
</script>

</body>
</html>

源码工程: https://github.com/Jason-Chen-2017/restfeel

运行

系统异常统一处理

螢幕快照 2017-03-30 13.29.14.png

螢幕快照 2017-03-30 13.29.04.png

螢幕快照 2017-03-30 13.28.55.png

这个思路很有实用价值,大大减少了系统出问题debug,去赋值粘贴到google,baidu, stackoverflow的手工操作。欢迎试用。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏C/C++基础

jsoncpp初探

首先说一下JSON。JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。它基于ECMAScript的一个子集。 JSO...

1162
来自专栏禁心尽力

实战技能:小小微信支付业务,何必虚惊一场

记得上次接触微信支付是2016年底,那次也是我程序生涯中首次碰及支付业务,慌张谈不上但是懵逼怀疑时时都有。说起第三方登录或者支付,想必都清楚是直接调用人家现成的...

1202
来自专栏XAI

Highcharts AJAX JSON JQuery 实现动态数据交互显示图表 柱形图

这是第一篇实例的步骤与代码。还有整个项目的结构图。 http://my.oschina.net/xshuai/blog/345117 原创的博文。转载注明出处...

5126
来自专栏机器学习从入门到成神

Java 进阶面试问题列表

1021
来自专栏everhad

[翻译][架构设计]The Clean Architecture

原文地址:The Clean Architecture The Clean Architecture ? Over the last several years...

6416
来自专栏ShaoYL

XCode调试器LLDB

2033
来自专栏学习力

《Java从入门到放弃》框架入门篇:spring中IOC的注入姿势

18610
来自专栏JavaEdge

控制并发线程数的Semaphore信号量(Semaphore)语法应用场景其他方法

4207
来自专栏Android相关

IjkPlayer初始化过程

最近调研做视频秒开,使用B站开源的ijkplayer作为播放器。ijkplayer基于ffmpeg的播放器。

2721
来自专栏wblearn

我的Web开发实战总结(二)

这篇是继我的Web开发实战总结(一)的第二篇文章,在此篇里,我主要总结一下如何把Web页面上的报表或列表数据转换成pdf文件下载到本地。其中涉及到的知识我也会提...

1111

扫码关注云+社区

领取腾讯云代金券