SpringBoot 统一异常处理 ControllerAdvice
转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/80678034
本文出自【赵彦军的博客】
在用spring Boot
做web
后台时,经常会出现异常,如果每个异常都自己去处理很麻烦,所以我们创建一个全局异常处理类来统一处理异常。通过使用@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相关推荐
- springboot统一异常处理类及注解参数为数组的写法
springboot统一异常处理类及注解参数为数组的写法 参考文章: (1)springboot统一异常处理类及注解参数为数组的写法 (2)https://www.cnblogs.com/zhucww ...
- springboot统一异常处理及返回数据的处理
springboot统一异常处理及返回数据的处理 参考文章: (1)springboot统一异常处理及返回数据的处理 (2)https://www.cnblogs.com/renshengruozhi ...
- Springboot 统一异常处理
前言:最近接手了一个比较让人头大的项目(供应商做到一半) 其中最让人头疼的是 Controller层的每一个方法都往外抛异常,自己又是一个菜鸟,而且时间比较短,采用了如下方式来做统一异常处理. 定义一 ...
- SpringBoot统一异常处理详解
文章目录 一.概述 1.统一异常处理介绍 2.原理和目标 二.Assert(断言) 1.概述 2.Assert自定义实战 2.1 自定义接口Assert 2.2 自定义异常 2.3 Enum整合 2. ...
- 统一异常处理ControllerAdvice
用这个@ControllerAdvice 注解处理不同异常,下面是一个鉴权异常统一处理,可以跳转到异常页面,或提示未授权; package cn.itcast.shiro;import org.apa ...
- Springboot 统一异常处理 Assert @ControllerAdvice
前言 上一篇SpringBoot 参数检验Assert使用了解了SpringBoot 参数检验Assert的使用,我们是不是可以自定义Assert,来实现自定义异常呢? 用 Assert(断言) 替换 ...
- springboot 统一异常处理
在sping框架里定义我们想要的异常类,不能继承Exception,要继承RuntimeException,原因在于spring框架只对抛出的异常是RuntimeException,才会进行事务回滚, ...
- Springboot对web应用的统一异常处理
我们在做Web应用的时候,请求处理过程中发生错误是非常常见的情况.Spring Boot提供了一个默认的映射:/error,当处理中抛出异常之后,会转到该请求中处理,并且该请求有一个全局的错误页面用来 ...
- SpringBoot 2.x 统一异常处理
1.统一异常处理类 package cn.hadron.controller; import org.springframework.web.bind.annotation.ControllerAdv ...
最新文章
- Redis集群架构搭建详解
- .net开发人员应该知道(一)
- 福禄克中国区高管:高精度和应用性是未来测试主要发展方向
- 入门javascript_Espruino入门,Espruino是用于微控制器JavaScript解释器
- 判断浏览器设置相应的CSS
- LeetCode34. 在排序数组中查找元素的第一个和最后一个位置(二分查找)
- 使用vs2019和pyinstaller将py文件打包成一个exe文件(含图标),pyinstaller安装失败解决方案
- 大数据分析的环节有哪些
- 聊聊EurekaRibbonClientConfiguration
- Content negotiation
- QT property属性的应用
- 公司网站应该外包SEO公司还是自己去做?
- 室内定位之蓝牙定位精度(蓝牙AOA定位)
- Java个人职业规划目标改进_java个人职业发展方向规划范文
- 发布一个太空大战小游戏
- cocos2dx图片闪亮_SassDoc 2-闪亮的流章鱼出来了!
- Open judge 1.8.3
- DbContext 查询(二)
- Abelssoft SSD Fresh Plus 2021 v10.06.31890 固态硬盘性能优化工具中文版
- (数字图像处理MATLAB+Python)第四章图像正交变换-第一节:离散傅里叶变换
热门文章
- java求s a aa aaa_Java求s=a+aa+aaa+aaaa+aa...a的值
- Java多线程-生产者与消费者
- 那年大一在图书馆作死的大学高数笔记 | 导数和微分
- 用jiebaR分析比特币的文章
- 工程制图 (化工工艺流程图绘制 )
- 直播 | CIKM 2021论文解读:基于广群的知识图谱表示学习统一模型框架
- 双边分支网络:兼顾特征和分类的长尾问题解决方案
- 首届中国高校计算机大赛-人工智能创意赛启动,百度加盟全面赋能
- 机器学习理论《统计学习方法》学习笔记:第十章 隐马尔可夫模型(HMM)
- isulad代替docker_云原生时代的华为新“引擎”:iSula | Linux 中国