是什么

全局异常处理器即 把错误异常统一处理的方法。Java开发过程中,不可避免的会遇到各种异常情况,如果不做处理往往会导致程序崩溃!面对这种情况,传统方式就是使用try/catch去捕获并处理异常,但是这就会导致在程序中出现大量的冗余代码,增加代码量和降低代码的可读性。我们希望的是业务层只负责业务相关操作,将异常处理重业务层抽离开来,所有的异常我们单独设立一个类去捕获和处理它,这个就是全局异常处理器,全局异常处理器将框架内所有异常进行统一管理,我们只需在可能发生异常的方法中抛出即可,降低代码冗余,提高代码可读性;

为什么

1、不用在业务层中写try/catch,异常统一交给全局异常处理器去捕获和处理,降低代码冗余;
2、可以自定义异常,根据实际情况对业务异常进行更细致和明确的拓展;
3、配置简单,将代码复制到项目中即可使用;

怎么用

1、封装统一返回结果类
封装返回结果实体类,统一返回结果数据格式

/*** 通用结果返回*/
public class Result<T> implements Serializable {private static final long serialVersionUID = 1L;private Integer code;private String message;private T data;public Result() {}public Result(ResultCode resultCode) {this(resultCode.getCode(), resultCode.getMsg());}public Result(ResultCode resultCode, T data) {this(resultCode.getCode(), resultCode.getMsg(), data);}public Result(Integer code, String message) {this(code, message, null);}public Result(Integer code, String message, T data) {this.code = code;this.message = message;this.data = data;}
}

2、自定义异常类封装
封装自定义异常类,用于自定义异常抛出,根据实际情况对业务异常进行更细致和明确的拓展;

/*** 自定义异常类*/
@Data
public class CustomException extends RuntimeException {private static final long serialVersionUID = 1L;private Integer code;private String message;private Object date;public CustomException(Integer code,String message){this.code    = code;this.message = message;}public CustomException(Integer code,String message,Object date){this.code    = code;this.message = message;this.date    = date;}
}

3、定义全局异常处理类
如果是传统spring版本的话重写spring自带接口,并将该类配置在spring的xml中,将其作为一个bean注册到spring容器中即可;当然现在更多的都是用springboot开发,其对应的简化版本治具在处理类中添加 @ControllerAdvice@ExceptionHandler注解即可,我们可以在全局异常处理类里写多个ExceptionHandler,分别拦截不同类型的exception,然后再最后面设置一个拦截Exception.class的拦截器,用于拦截掉所有的方法,如果全局拦截中有我们不想拦截的异常类,只需要捕获以后再从新抛出即可示例如下:

/*** 全局异常处理类*/
@RestControllerAdvice
public class GlobalExceptionHandler {/*** sql异常**/@ExceptionHandler(SQLSyntaxErrorException.class)public Result sqlSyntaxErrorException(SQLSyntaxErrorException e) {return Result.failed(500,"sql错误:"+e.getMessage());}/*** 自定义异常**/@ExceptionHandler(CustomException.class)public Result customException(CustomException e) {return Result.failed(e.getCode(),e.getMessage(),e.getDate());}/*** HttpServerErrorException**/@ExceptionHandler(HttpServerErrorException.class)public Result httpServerErrorException(HttpServerErrorException e) {return Result.failed(503,e.getMessage());}/*** 参数校验异常* zlx* 11:29 2021/7/9* @param e 异常信息* @return com.station.framework.code.domain.Result**/@ExceptionHandler(BindException.class)public Result bindException(BindException e) {return Result.failed(500,"参数校验异常" + e.getMessage());}/*** 所有异常拦截* zlx* 11:29 2021/7/9* @param e 异常信息* @return com.station.framework.code.domain.Result**/@ExceptionHandler(Exception.class)public Result bindException(Exceptione) {return Result.failed(500,"参数校验异常" + e.getMessage());}
}

至此就完成了将异常处理从业务层剥离,将所有异常都在全局异常处理器中捕获进行统一处理!

全局异常处理器——优雅的处理异常相关推荐

  1. SpringBoot中定义全局异常处理器

    场景 SpringBoot中创建全局异常处理器,使发生异常时能处理. 项目搭建专栏: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/column/info/356 ...

  2. 异常处理器详解 Java多线程异常处理机制 多线程中篇(四)

    在Thread中有异常处理器相关的方法 在ThreadGroup中也有相关的异常处理方法 示例 未检查异常 对于未检查异常,将会直接宕掉,主线程则继续运行,程序会继续运行 在主线程中能不能捕获呢? 我 ...

  3. springMVC异常处理器:自定义异常处理器捕获系统异常,控制异常页面跳转

    首先看一个异常页面 404/500可能是大家最熟悉的两个错误代码,在传统方式下,代码遇到类如1/0这样的异常时,我们可以用try-catch捕获,交给前端控制器处理,如果前端控制器没有规范好异常处理器 ...

  4. Kotlin协程核心库分析-5 Job异常处理器注意点

    本章我们简单探讨一下异常处理: 我们知道协程传入CoroutineExceptionHandler对象即可捕获异常,那么对于子协程是否适用呢? fun main() {val eChild = Cor ...

  5. apache dubbo 自定义全局统一的异常处理器

    项目使用过的是apache dubbo 2.7.1, 封装了自定义全局统一的异常处理器. 统一异常处理器 需要实现javax.ws.rs.ext.ExceptionMapper接口. import o ...

  6. springboot全局异常处理器

    通过aop监控程序异常,全局异常捕获 定义全局异常处理器: import java.util.HashMap; import java.util.Map; import org.springframe ...

  7. C++ Qt全局异常处理器_异常处理

    异常处理是编程中十分重要但也最容易被人忽视的语言特性,它为开发者提供了处理程序运行时错误的机制,对于程序设计来说正确的异常处理能够防止泄露程序自身细节给用户,给开发者提供完整的错误回溯堆栈,同时也能提 ...

  8. spring设置全局异常处理器

    spring设置全局异常处理器 参考文章: (1)spring设置全局异常处理器 (2)https://www.cnblogs.com/gongxijun/p/5824723.html 备忘一下.

  9. SpringBoot 自定义全局异常处理器

    SpringBoot自定义全局异常处理器 一.maven依赖 二.GlobalExceptionHandler.java 三.ResponseStandard.java 四.logback.xml 五 ...

最新文章

  1. mysql localhost无法登陆_MySQL 'root'@'localhost'无法登录
  2. Java程序员总结分布式架构,你又了解多少呢?
  3. 64位Fedora运行32位C++程序所需的类库
  4. java编译的语句_在Java语言中,下列语句能通过编译的是()。
  5. 3.Vue 条件渲染
  6. Android自定义组合控件--EditText和Button组合成带有清空EditText内容功能的复合控件
  7. ubuntu下安装zabbix
  8. Node.js Express 应用启用资源压缩功能 - compression 库的应用
  9. MarkdownPad 汉化破解(含下载地址)
  10. xml转svg_C# Excel 转PDF/图片/HTML/TXT/XML/XPS/CSV/ODS/SVG/EMF
  11. 图片变色_一张图看懂手机CMF史,附带手机渐变色工艺解析
  12. centOS7.6安装MySQL8
  13. 最长公共子序列-动态规划(C/C++)
  14. “木马源”攻击影响多数编程语言的编译器,将在软件供应链攻击中发挥巨大作用...
  15. 杭电acm 1205 吃糖果
  16. 2022考研数学学习资源分享203G视频之tang家凤数学全程班网盘分享
  17. 项目实训- 基于unity的2D多人乱斗闯关游戏设计与开发(综述)
  18. kail linux暴力破解wifi
  19. Excel 实现多列文本合并/合并单元格内容 的三种方法
  20. JS算法-整数转罗马数字

热门文章

  1. 安卓协议逆向之frida hook百例二
  2. 一个冲压工厂的的产能应如何计算?
  3. 什么是邮件发送信誉?
  4. 杂波分析 matlab,基于systemview matlab的天基雷达杂波建模与分析
  5. stringbuilder用法 java_Java StringBuilder的用法示例
  6. Node.js之commander.js学习笔记
  7. %2d在c语言中什么作用,C语言中的 %2d是什么意思
  8. 记录一下开发邮件模板兼容outlook客户端以及其他主流邮箱客户端所引发的无数问题,头发要薅没了
  9. 笔记本电脑怎么重装系统Win7?给你10分钟能完成系统重装吗?
  10. Agilent53220A/安捷伦53220A频率计