一、全局异常处理

//Result定义全局数据返回对象
package com.xiaobing.demo001.domain; public class Result {
private Integer code;
private String message;
private Object data; public Integer getCode() {
return code;
} public String getMessage() {
return message;
} public Object getData() {
return data;
} public void setCode(Integer code) {
this.code = code;
} public void setMessage(String message) {
this.message = message;
} public void setData(Object data) {
this.data = data;
} public Result() {
} public Result(Integer code, String message, Object data) {
this.code = code;
this.message = message;
this.data = data;
} @Override
public String toString() {
return "Result{" +
"code=" + code +
", message='" + message + '\'' +
", data=" + data +
'}';
}
}

(1) RestControllerAdvice注解使用,如下全局异常示例:
注解: @RestControllerAdvice 和@ControllerAdvice 是用来修饰类的,表示为一个增强类…我们定义全局异常拦截通常是使用 @RestControllerAdvice结合 @ExceptionHandler 来捕获绝大部分异常,然后统一返回Json形式…

//假如当传参为0 时肯定会报错 除数不能为0
package com.xiaobing.demo001.controller; import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; @RestController
@RequestMapping("api/v1/test")
public class TestExceptionController { @GetMapping("abnormal")
public void testExt() {
int i = 1/0;
}
}
//全局异常捕获方法
package com.xiaobing.demo001.handler; import com.xiaobing.demo001.domain.Result;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import javax.servlet.http.HttpServletRequest; /**异常处理类
* @author Administrator
*/
@RestControllerAdvice
public class ExceptionsHandler { @ExceptionHandler(value = Exception.class)
Result handlerException(Exception e, HttpServletRequest request) { return new Result(500,"服务器异常","");
}
}

二、针对性异常捕获

@ExceptionHandler(value = ArithmeticException.class)
Result arithmeticExceptionException(ArithmeticException e, HttpServletRequest request) { return new Result(-1,"除数不能为0","");
}

三、自定义异常捕获

//自定义异常类
package com.xiaobing.demo001.domain; public class MyException extends RuntimeException { private String code;
private String msg; public String getCode() {
return code;
} public String getMsg() {
return msg;
} public void setCode(String code) {
this.code = code;
} public void setMsg(String msg) {
this.msg = msg;
} public MyException() {
} public MyException(String msg) {this.msg = msg;
}
}
//业务代码,MyException
@RestController
@RequestMapping("api/v1/test")
public class TestExceptionController {
@GetMapping("myException")
public void testMyExcsption() {
throw new MyException("自定义异常信息");
}
//捕获我们新增的异常
@ExceptionHandler(value = MyException.class)
Result myException(MyException e, HttpServletRequest request) {
return new Result(-1,"自定义异常信息","");
}

四、常用异常捕获分享

    /** 运行时异常 */
@ExceptionHandler(RuntimeException.class)
public Result runtimeExceptionHandler(RuntimeException ex) {
return Result.error("运行时异常");
} /** 空指针异常 */
@ExceptionHandler(NullPointerException.class)
public Result nullPointerExceptionHandler(NullPointerException ex) {
return Result.error("空指针异常");
} /** 类型转换异常 */
@ExceptionHandler(ClassCastException.class)
public Result classCastExceptionHandler(ClassCastException ex) {
return Result.error("类型转换异常");
}
/** 文件未找到异常 */
@ExceptionHandler(FileNotFoundException.class)
public Result FileNotFoundException(FileNotFoundException ex) {
return Result.error("文件未找到异常");
}
/** 数字格式异常 */
@ExceptionHandler(NumberFormatException.class)
public Result NumberFormatException(NumberFormatException ex) {
return Result.error("数字格式异常");
}
/** 安全异常 */
@ExceptionHandler(SecurityException.class)
public Result SecurityException(SecurityException ex) {
return Result.error("安全异常");
}
/** sql异常 */
@ExceptionHandler(SQLException.class)
public Result SQLException(SQLException ex) {
return Result.error("sql异常");
}
/** 类型不存在异常 */
@ExceptionHandler(TypeNotPresentException.class)
public Result TypeNotPresentException(TypeNotPresentException ex) {
return Result.error("类型不存在异常");
} /** IO异常 */
@ExceptionHandler(IOException.class)
public Result iOExceptionHandler(IOException ex) {
log.error("IO异常:{} ", ex.getMessage(), ex);
return Result.error("IO异常");
} /** 未知方法异常 */
@ExceptionHandler(NoSuchMethodException.class)
public Result noSuchMethodExceptionHandler(NoSuchMethodException ex) {
log.error("未知方法异常:{} ", ex.getMessage(), ex);
return Result.error("未知方法异常");
} /** 数组越界异常 */
@ExceptionHandler(IndexOutOfBoundsException.class)
public Result indexOutOfBoundsExceptionHandler(IndexOutOfBoundsException ex) {
return Result.error("数组越界异常");
}
/** sql语法错误异常 */
@ExceptionHandler(BadSqlGrammarException.class)
public Result BadSqlGrammarException(BadSqlGrammarException ex) {
return Result.error("sql语法错误异常");
} /** 无法注入bean异常 */
@ExceptionHandler(NoSuchBeanDefinitionException.class)
public Result NoSuchBeanDefinitionException(NoSuchBeanDefinitionException ex) {
return Result.error("无法注入bean");
} /** Http消息不可读异常 */
@ExceptionHandler({HttpMessageNotReadableException.class})
public Result requestNotReadable(HttpMessageNotReadableException ex) {
return Result.error("Http消息不可读");
} /** 400错误 */
@ExceptionHandler({TypeMismatchException.class})
public Result requestTypeMismatch(TypeMismatchException ex) {
return Result.error("服务器异常");
} /** 500错误 */
@ExceptionHandler({ConversionNotSupportedException.class, HttpMessageNotWritableException.class})
public Result server500(RuntimeException ex) {
return Result.error("服务器异常");
} /** 栈溢出 */
@ExceptionHandler({StackOverflowError.class})
public Result requestStackOverflow(StackOverflowError ex) {
return Result.error("栈溢出异常");
} /** 除数不能为0 */
@ExceptionHandler({ArithmeticException.class})
public Result arithmeticException(ArithmeticException ex) {
return Result.error("除数不能为0异常");
} /** 其他错误 */
@ExceptionHandler({Exception.class})
public Result exception(Exception ex) {
return Result.error("网络连接失败,请退出后再试");
}

SpringBoot 全局异常拦截捕获处理的更多相关文章

  1. SpringBoot全局异常拦截

    SpringBoot全局异常捕获 使用到的技能 @RestControllerAdvice或(@ControllerAdvice+@ResponseBody) @ExceptionHandler 代码 ...

  2. springboot全局异常拦截源码解读

    在springboot中我们可以通过注解@ControllerAdvice来声明一个异常拦截类,通过@ExceptionHandler获取拦截类抛出来的具体异常类,我们可以通过阅读源码并debug去解 ...

  3. SpringBoot全局异常的捕获设置

    1.新建立一个捕获异常的实体类 如:LeeExceptionHandler package com.leecx.exception; import javax.servlet.http.HttpSer ...

  4. Asp.Netcore使用Filter来实现接口的全局异常拦截,以及前置拦截和后置拦截

    原文链接:https://blog.csdn.net/qq_38762313/article/details/85234594 全局异常拦截器:       解决写每个接口都需要去做容错而添加try{ ...

  5. Spring 全局异常拦截根据业务返回不同格式数据 自定义异常

    1.全局异常拦截:针对所有异常进行拦截 可根据请求自定义返回格式 2.自定义异常类 处理不同业务的异常 接下来开始入手代码: 1).自定义异常类 @ControllerAdvice//添加注解 记得开 ...

  6. springboot 全局异常捕获,异常流处理业务逻辑

    前言 上一篇文章说到,参数校验,往往需要和全局的异常拦截器来配套使用,使得返回的数据结构永远是保持一致的.参数异常springboot默认的返回结构: { "timestamp": ...

  7. python中如何用sys.excepthook来对全局异常进行捕获、显示及输出到error日志中

    使用sys.excepthook函数进行全局异常的获取. 1. 使用MessageDialog实现异常显示: 2. 使用logger把捕获的异常信息输出到日志中: 步骤:定义异常处理函数, 并使用该函 ...

  8. springBoot 全局异常方式处理自定义异常 @RestControllerAdvice + @ExceptionHandler

    前言 本文讲解使用 @ControllerAdvice + @ExceptionHandler 进行全局的 Controller 层异常处理,可以处理大部分开发中用到的自自定义业务异常处理了,再也不用 ...

  9. 爱上MVC~业务层刻意抛出异常,全局异常的捕获它并按格式返回

    回到目录 对于业务层的程序的致命错误,我们一直的做法就是直接抛出指定的异常,让程序去终断,这种做法是对的,因为如果一个业务出现了致命的阻塞的问题,就没有必要再向上一层一层的返回了,但这时有个问题,直接 ...

随机推荐

  1. npm卸载appium,重新安装桌面版appium

    大家好,appium环境搭建的时候,我选的是使用npm安装appium,但我在使用过程中,发现这样安装的appium没有界面,都是需要通过命令行操作,对于我来说,有点吃力.最后,还是觉得初学就先用桌面 ...

  2. 三款超实用,好用的Python开发IDE推荐,看完总会有一款合适你的

    @ 目录 前言 IDE介绍 Sublime Pycharm(推荐使用社区版免费版) visualstudio 倒底怎么选择 前言 一款好的代码编辑工具,让你学习事半功能,那今天就来看看我们学Pytho ...

  3. 看动画学算法之:doublyLinkedList

    目录 简介 doublyLinkedList的构建 doublyLinkedList的操作 头部插入 尾部插入 插入给定的位置 删除指定位置的节点 简介 今天我们来学习一下复杂一点的LinkedLis ...

  4. Sentry 监控 - Distributed Tracing 分布式跟踪

    系列 1 分钟快速使用 Docker 上手最新版 Sentry-CLI - 创建版本 快速使用 Docker 上手 Sentry-CLI - 30 秒上手 Source Maps Sentry For ...

  5. xLua中C#调用Lua

    C#调用Lua 一.前提 这里使用的是XLua框架,需要提前配置xlua,设置加载器路径: 可以参考之前的Blog:<xlua入门基础>: 二.C#调用Lua全局变量 lua中所有的全局变 ...

  6. NOIP模拟77

    前言 感觉最近太飘了,这次考试是挺好的一次打击(好像也不算是). 犯了一个智障错误(双向边一倍数组 100pts->30pts)别的就.. T1 最大或 解题思路 一开始我以为是一个找规律,然而 ...

  7. 生日礼物网页Javascript版本与锚点版本

    <style> #dv1{ width:60px; height:36px; margin:0 auto; background-color:orange; display:none; } ...

  8. FastAPI 学习之路(十三)Cookie 参数,Header参数

    系列文章: FastAPI 学习之路(一)fastapi--高性能web开发框架 FastAPI 学习之路(二) FastAPI 学习之路(三) FastAPI 学习之路(四) FastAPI 学习之 ...

  9. PAT (Basic Level) Practice (中文)1025 反转链表 (25分)

    1025 反转链表 (25分) 给定一个常数 K 以及一个单链表 L,请编写程序将 L 中每 K 个结点反转.例如:给定 L 为 1→2→3→4→5→6,K 为 3,则输出应该为 3→2→1→6→5→ ...

  10. 对cpu与load的理解及线上问题处理思路

    cpu如何计算 当我们执行top命令的时候,看到里面的值(主要是cpu和load)值是一直在变的,因此有必要简单了解一下Linux系统中cpu的计算方式. cpu分为系统cpu和进程.线程cpu,系统 ...