《Springboot极简教程》系统异常全局统一处理:@ControllerAdvice plus @ExceptionHandler统一异常处理代码实例运行
时间:2022-06-07
本文章向大家介绍《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的手工操作。欢迎试用。
- [汇总]2013年度全球重、特大网络安全事件回顾
- android常用接口(一)
- 2014密码时代已死?六种旨在取代传统密码位置的新奇想法
- 程序员你为什么这么累【续】:编码习惯之配置规范
- Spring Security (一) Architecture Overview
- Spring Security (二) Guides
- 一个 android 的框架
- Spring Cloud实战小贴士:Ribbon的饥饿加载(eager-load)模式
- android常用接口(二)
- Spring Cloud实战小贴士:Zuul的饥饿加载(eager-load)使用
- RxAndroid完全教程
- 全能型反汇编引擎 – Capstone-Engine
- Hijack攻击揭秘
- 都在说微服务,那么微服务的反模式和陷阱是什么(二)
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- 设计模式实战-抽象工厂模式,分而治之
- 搞定常被问的数组和排序算法,附面试题
- 玩转 Java 时间 + 面试题
- 【分布式技术】分布式系统调度架构之两层调度,解决单体调度问题
- 一致性哈希算法,在分布式开发中你必须会写,来看完整代码
- FFmpeg 开发(04):FFmpeg + OpenGLES 实现音频可视化播放
- 【Postgres扩展】pg_auto_failover支持高可用性和自动故障转移
- 「PostgreSQL」用MapReduce的方式思考,但使用SQL
- 每天百万交易的支付系统,生产环境该怎么设置JVM堆内存大小
- gb格式注释文件转换成gff3注释文件格式
- 有人问你Elasticsearch分布式架构原理,将这篇文章丢过去
- 每日两题 T1
- 每日两题 T2
- 每日两题 T3
- 搭建node服务(三):使用TypeScript