转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/80678034
本文出自【赵彦军的博客】

在用spring Bootweb后台时,经常会出现异常,如果每个异常都自己去处理很麻烦,所以我们创建一个全局异常处理类来统一处理异常。通过使用@ControllerAdvice定义统一的异常处理类,而不是在每个Controller中逐个定义。

ControllerAdvice

@ControllerAdvice,是Spring3.2提供的新注解,从名字上可以看出大体意思是控制器增强。

实例讲解

下面我们通过一个例子,捕获 IndexOutOfBoundsException 异常,然后统一处理这个异常,并且给用户返回统一的响应。

创建异常统一处理类:ExceptionAdvice

package com.yiba.didiapi.exception;import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;@ControllerAdvice
public class ExceptionAdvice {@ExceptionHandler({ IndexOutOfBoundsException.class })@ResponseBodypublic String handleIndexOutOfBoundsException(Exception e) {e.printStackTrace();return "testArrayIndexOutOfBoundsException";}}

定义 ApiController

@RestController
public class ApiController {@GetMapping("getUser")public String getUser() {List<String> list = new ArrayList<>();return list.get(2);}}

可以看到在 getUser 方法中, 会抛出 IndexOutOfBoundsException 异常。但是这个异常不会通过接口抛给用户,会被 ExceptionAdvice 类拦截,下面我们用 postMan 验证一下。

统一处理自定义异常

自定义 GirlException 异常

public class GirlException extends RuntimeException {private Integer code;public GirlException(Integer code, String msg) {super(msg);this.code = code;}public Integer getCode() {return code;}public void setCode(Integer code) {this.code = code;}}

controller 里面抛出异常,新建ApiController

@RestController
public class ApiController {@GetMapping("getUser/{id}")public String getUser(@PathVariable("id") Integer id) {if (id == 0) {throw new GirlException(101, "年龄太小了");} else if (id == 1) {throw new GirlException(102, "年龄不够18岁");}return "ok";}
}

自定义统一返回对象 ResultUtil

public class ResultUtil {int code;String mes;public ResultUtil(int code, String mes) {this.code = code;this.mes = mes;}public int getCode() {return code;}public void setCode(int code) {this.code = code;}public String getMes() {return mes;}public void setMes(String mes) {this.mes = mes;}
}

创建异常统一处理类:ExceptionAdvice

@ControllerAdvice
public class ExceptionAdvice {@ExceptionHandler({Exception.class})@ResponseBodypublic ResultUtil handleIndexOutOfBoundsException(Exception e) {ResultUtil resultUtil;if (e instanceof GirlException) {GirlException girlException = (GirlException) e;resultUtil = new ResultUtil(girlException.getCode(), girlException.getMessage());return resultUtil;}return new ResultUtil(0, "未知异常");}
}

测试


个人微信号:zhaoyanjun125 , 欢迎关注

SpringBoot 统一异常处理 ControllerAdvice相关推荐

  1. springboot统一异常处理类及注解参数为数组的写法

    springboot统一异常处理类及注解参数为数组的写法 参考文章: (1)springboot统一异常处理类及注解参数为数组的写法 (2)https://www.cnblogs.com/zhucww ...

  2. springboot统一异常处理及返回数据的处理

    springboot统一异常处理及返回数据的处理 参考文章: (1)springboot统一异常处理及返回数据的处理 (2)https://www.cnblogs.com/renshengruozhi ...

  3. Springboot 统一异常处理

    前言:最近接手了一个比较让人头大的项目(供应商做到一半) 其中最让人头疼的是 Controller层的每一个方法都往外抛异常,自己又是一个菜鸟,而且时间比较短,采用了如下方式来做统一异常处理. 定义一 ...

  4. SpringBoot统一异常处理详解

    文章目录 一.概述 1.统一异常处理介绍 2.原理和目标 二.Assert(断言) 1.概述 2.Assert自定义实战 2.1 自定义接口Assert 2.2 自定义异常 2.3 Enum整合 2. ...

  5. 统一异常处理ControllerAdvice

    用这个@ControllerAdvice 注解处理不同异常,下面是一个鉴权异常统一处理,可以跳转到异常页面,或提示未授权; package cn.itcast.shiro;import org.apa ...

  6. Springboot 统一异常处理 Assert @ControllerAdvice

    前言 上一篇SpringBoot 参数检验Assert使用了解了SpringBoot 参数检验Assert的使用,我们是不是可以自定义Assert,来实现自定义异常呢? 用 Assert(断言) 替换 ...

  7. springboot 统一异常处理

    在sping框架里定义我们想要的异常类,不能继承Exception,要继承RuntimeException,原因在于spring框架只对抛出的异常是RuntimeException,才会进行事务回滚, ...

  8. Springboot对web应用的统一异常处理

    我们在做Web应用的时候,请求处理过程中发生错误是非常常见的情况.Spring Boot提供了一个默认的映射:/error,当处理中抛出异常之后,会转到该请求中处理,并且该请求有一个全局的错误页面用来 ...

  9. SpringBoot 2.x 统一异常处理

    1.统一异常处理类 package cn.hadron.controller; import org.springframework.web.bind.annotation.ControllerAdv ...

最新文章

  1. Redis集群架构搭建详解
  2. .net开发人员应该知道(一)
  3. 福禄克中国区高管:高精度和应用性是未来测试主要发展方向
  4. 入门javascript_Espruino入门,Espruino是用于微控制器JavaScript解释器
  5. 判断浏览器设置相应的CSS
  6. LeetCode34. 在排序数组中查找元素的第一个和最后一个位置(二分查找)
  7. 使用vs2019和pyinstaller将py文件打包成一个exe文件(含图标),pyinstaller安装失败解决方案
  8. 大数据分析的环节有哪些
  9. 聊聊EurekaRibbonClientConfiguration
  10. Content negotiation
  11. QT property属性的应用
  12. 公司网站应该外包SEO公司还是自己去做?
  13. 室内定位之蓝牙定位精度(蓝牙AOA定位)
  14. Java个人职业规划目标改进_java个人职业发展方向规划范文
  15. 发布一个太空大战小游戏
  16. cocos2dx图片闪亮_SassDoc 2-闪亮的流章鱼出来了!
  17. Open judge 1.8.3
  18. DbContext 查询(二)
  19. Abelssoft SSD Fresh Plus 2021 v10.06.31890 固态硬盘性能优化工具中文版
  20. (数字图像处理MATLAB+Python)第四章图像正交变换-第一节:离散傅里叶变换

热门文章

  1. java求s a aa aaa_Java求s=a+aa+aaa+aaaa+aa...a的值
  2. Java多线程-生产者与消费者
  3. 那年大一在图书馆作死的大学高数笔记 | 导数和微分
  4. 用jiebaR分析比特币的文章
  5. 工程制图 (化工工艺流程图绘制 )
  6. 直播 | CIKM 2021论文解读:基于广群的知识图谱表示学习统一模型框架
  7. 双边分支网络:兼顾特征和分类的长尾问题解决方案
  8. 首届中国高校计算机大赛-人工智能创意赛启动,百度加盟全面赋能
  9. 机器学习理论《统计学习方法》学习笔记:第十章 隐马尔可夫模型(HMM)
  10. isulad代替docker_云原生时代的华为新“引擎”:iSula | Linux 中国