之前用springboot的时候,只知道捕获异常使用try{}catch,一个接口一个try{}catch,这也是大多数开发人员异常处理的常用方式,虽然屡试不爽,但会造成一个问题,就是一个Controller下面,满屏幕的try{}catch,看着一点都不优雅,一点都不符合小明的气质,憋了这么久,小明今天终于决定对所有异常实施统一处理的方案。

开发准备

JDK8、正常的springboot项目

代码编写

通用异常处理

其实Spring系列的项目全局异常处理方式早已存在,只不过我们一直忙于搬砖,很少停下脚步去审视这个日夜与我们相伴的朋友。为了贴合主题,本次主要针对SpringBoot全局异常处理进行举例说明。

SpringBoot中有一个@ControllerAdvice的注解,使用该注解即表示开启全局异常捕获,接下来我们只需在自定义的方法上使用@ExceptionHandler注解,并定义捕获异常的类型,对这种类型的异常进行统一的处理。

举个例子:

假如我们需要针对NullException(空指针异常,是Java程序员最痛恨的异常,没有之一)进行全局处理(如下所示)。

@RestControllerAdvice
public class GlobalExceptionHandler {/*** 处理空指针的异常* @param req* @param e* @return*/@ExceptionHandler(value =NullPointerException.class)public BaseResponseFacade exceptionHandler(HttpServletRequest req, NullPointerException e){log.error("发生空指针异常!原因是:",e);return ResponseUtil.error(ResponseCode.ERROR);}
}

讷,就这么简单。其他可能发生的异常,都可以以这种方式处理快速处理。此处大家应该表现的十分兴奋,但请不要高兴太早,因为接下来,有更令激动人心的事情。

自定义异常处理

自定义一个异常

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.experimental.Accessors;/*** @Description 自定义异常* @Date 2019-08-05 15:49* @Created by 程序员小明*/
@Data
@AllArgsConstructor
@Accessors(chain = true)
public class BizException extends RuntimeException {/*** 错误码*/protected Integer errorCode;/*** 错误信息*/protected String errorMsg;
}

显而易见,这个异常继承了RuntimeException,属于运行时异常。细心的朋友已经发现,我使用了Lombok插件,非常契合今天的主题,给大家简单介绍一下:

lombok是一个可以帮助我们简化java代码编写的工具类,尤其是简化javabean的编写,即通过采用注解的方式,消除代码中的构造方法,getter/setter等代码,使我们写的类更加简洁(如果使用的IDE是idea,需要安装插件哈)。

定义过之后,我们就可以和之前处理NullException方式一样处理我们自定义的异常。包括处理其他异常,都是这种方式。直接贴代码。

@Slf4j
@RestControllerAdvice
public class GlobalExceptionHandler {/*** 处理自定义的业务异常* @param req* @param e* @return*/@ExceptionHandler(value = BizException.class)public BaseResponseFacade bizExceptionHandler(HttpServletRequest req, BizException e){log.error("发生业务异常!原因是:{}",e.getErrorMsg());return ResponseUtil.error(e.getErrorCode(),e.getErrorMsg());}/*** 处理空指针的异常* @param req* @param e* @return*/@ExceptionHandler(value =NullPointerException.class)public BaseResponseFacade exceptionHandler(HttpServletRequest req, NullPointerException e){log.error("发生空指针异常!原因是:",e);return ResponseUtil.error(ResponseCode.ERROR);}/*** 处理其他异常* @param req* @param e* @return*/@ExceptionHandler(value =Exception.class)public BaseResponseFacade exceptionHandler(HttpServletRequest req, Exception e){log.error("未知异常!原因是:",e);return ResponseUtil.error(ResponseCode.INTERNAL_SERVER_ERROR);}
}

整个全局异常处理方式核心就是以上介绍这些。下面用一个Demo给大家举个例子

@GetMapping("/test")
public BaseResponseFacade test(){if(true){throw new BizException(1,"error");}return ResponseUtil.success();
}

地址栏请求,进入这个方法后,会抛出异常,此时全局异常生效,就会返回异常处理过后的信息

{"errorCode":1,"errorMsg":"error","data":null}

springboot全局异常处理_SpringBoot:如何优雅地处理全局异常相关推荐

  1. springboot requestmapping 正则_SpringBoot实现优雅的后端接口

       阅读本文约需要8分钟  大家好,我是你们的导师,我每天都会在这里给大家分享一些干货内容(当然了,周末也要允许老师休息一下哈).上次老师跟大家分享了下QPS.TPS.并发用户数.吞吐量关系的相关知 ...

  2. 看看别人家 SpringBoot 的全局异常处理,多么优雅....

    今日推荐编程大佬是否能记住代码,不用百度就能啪啪啪敲出来么?在 IDEA 中的各种调试技巧,轻松定位 Bug(超级全面) 后端接口如何提高性能? 16 个写代码的好习惯 为什么不推荐使用BeanUti ...

  3. 看看人家 SpringBoot 的全局异常处理,多么优雅...

    点击关注公众号,Java干货及时送达 本篇文章主要介绍的是SpringBoot项目进行全局异常的处理. SpringBoot全局异常准备 说明:如果想直接获取工程那么可以直接跳到底部,通过链接下载工程 ...

  4. dubbo全局异常处理_基于spring aop的dubbo异常统一处理

    dubbo统一异常处理,调用方只显示封装后的异常. 1.返回封装后的Exception 2.返回封装后的统一返回信息 import org.aspectj.lang.annotation.AfterT ...

  5. springboot requestmapping 正则_SpringBoot三招组合拳,手把手教你打出优雅的后端接口...

    一.前言 一个后端接口大致分为四个部分组成:接口地址(url).接口请求方式(get.post等).请求数据(request).响应数据(response).如何构建这几个部分每个公司要求都不同,没有 ...

  6. java flux api,SpringBoot学习系列-WebFlux REST API 全局异常处理

    本文内容 为什么要全局异常处理? WebFlux REST 全局异常处理实战 小结 摘录:只有不断培养好习惯,同时不断打破坏习惯,我们的行为举止才能够自始至终都是正确的. 一.为什么要全局异常处理? ...

  7. Spring Boot项目优雅的全局异常处理方式(全网最新)

    全局异常处理 前言 一.全局异常处理方式一 1.1 自定义全局异常类 1.2 手动抛出异常 1.3 测试打印 二.全局异常处理方式二 2.1 定义基础接口类 2.2 定义枚举类 2.3 自定义异常类 ...

  8. springBoot 全局异常处理 报错 : Could not resolve method parameter at index 0 in public .....

    在学习 springboot 的全局异常处理时   ,我写了一个处理异常类 @ControllerAdvice public class ErrorCatchController {@Exceptio ...

  9. bean加载时调用@value时会出现空指针异常_SpringMVC全局异常处理机制

    SpringMVC全局异常处理 SpringMVC除了可以做URL映射和请求拦截外,还可以做全局异常的处理.全局异常处理可能我们平时比较少机会接触,但是每个项目都肯定会做这个处理.比如在上一间公司,是 ...

最新文章

  1. 开始升级我的工作流系统
  2. 微软29岁员工年薪税后85W!竟然说自己活得很惨!网友:确实挺惨!
  3. 一个webpack,react,less,es6的DEMO
  4. real210移植记录-u-boot2013.10引导linux3.10.30进入控制台
  5. Python爬虫入门之四urllib-GET与POST请求
  6. how debug option is handled - handle_debug
  7. Java 集合练习——3
  8. (十)Linux之等待队列
  9. java createcriteria_Hibernate createCriteria查询详解
  10. springboot 启动加载数据 commandLineRunner
  11. RGB想YCbCr空间的变换
  12. Microsoft Caffe(msCaffe)无GPU快速配置
  13. 使用FFmpeg工具进行推流、拉流、截图、变速、转换,及常见问题处理
  14. python评分卡模型 简书_评分卡模型开发-定量特征筛选
  15. 拿下我人生中第7个Offer,社招面试心得
  16. 硕士毕业论文奇偶页眉页脚的设置
  17. scipy.statis统计学的常用Python包
  18. web 常用的几种字体_3种免费Web字体服务比较
  19. mapUnderscoreToCamelCase作用- 开启驼峰
  20. 论文笔记【Neural Collaborative Filtering】

热门文章

  1. 计算机网络 课后题答案解析,计算机网络课后习题和答案解析
  2. install opencv from source
  3. 金电联行程小龙:企业数字化转型的目标、决策与实践
  4. 进阶必看的 RocketMQ ,就这篇了!
  5. 苹果:App Store中国区无版号游戏8月1日起下架;美国计划打造量子互联网;HHVM 4.67 发布 | 极客头条...
  6. 腾讯回应“QQ 冻结”;高德上线“家人地图”惹争议;Linux 内核讨论引入 Rust 代码| 极客头条...
  7. JavaScript 简史 1
  8. 航拍高手、吉他十级,6500+Star 开源项目作者,后浪程序员给力!
  9. 2020 年区块链最具影响力人物 Top 20,孙宇晨也上榜了
  10. 程序员高效学习的六原则