一、全局异常处理

//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. python BeautifulSoup html解析

    * BeautifulSoup 的.find(), .findAll() 函数原型 findAll(tag, attributes, recursive, text, limit, keywords) ...

  2. three.js 元素跟随物体效果

    需求: 1.实现元素跟随指定物体位置进行位置变化 实现方案: 1--- Sprite 精灵 2  --- cavans 画图后创建模型贴图 3 --- CSS2DRenderer渲染方式 4 --- ...

  3. 生动直观的Gif图告诉你如何安装Python安装第3方库,在线安装离线安装全都搞定

    前言 学Python的小伙伴都知道,Python学习过程中需要装不少的第3方的库,今天就和大家一起分享下第3方库的安装方法 在线安装(推荐安装式式) 点开Pycharm--file--Project- ...

  4. xmake v2.5.8 发布,新增 Pascal/Swig 程序和 Lua53 运行时支持

    xmake 是一个基于 Lua 的轻量级跨平台构建工具,使用 xmake.lua 维护项目构建,相比 makefile/CMakeLists.txt,配置语法更加简洁直观,对新手非常友好,短时间内就能 ...

  5. JVM学习笔记——类加载器与类加载过程

    类加载器与类加载过程 类加载器ClassLoader 类加载器 ClassLoader 用于把 class 文件装载进内存. 启动类加载器(Bootstrap ClassLoader): 这个类加载使 ...

  6. 使用率激增250%,这份报告再将 Serverless 推向幕前

    ​ 作者 | 望宸 来源 | Serverless 公众号 相比去年,国外 Serverless 的适用群体在迅速扩大,函数执行时长不断增加,使用方式也越加成熟,开发者工具也更加开放.本文是对 Dat ...

  7. Java基础之(十一):方法

    Java方法详解 何谓方法(了解) System.out.println() // 类 对象 方法 方法是语句的集合,它们在一起执行一个功能. 方法是解决一类问题的步骤的有序集合 方法包含于类或对象中 ...

  8. java---String 和 StringBuffer

    Java-String和StringBuffer类 Java String 类 字符串在Java中属于对象,Java提供String类来创建和操作字符串. 创建字符串 创建字符串常用的方法如下: ​ ...

  9. 深度剖析Redis6的持久化机制(大量图片说明,简洁易懂)

    Redis的强劲性能很大程度上是由于它所有的数据都存储在内存中,当然如果redis重启或者服务器故障导致redis重启,所有存储在内存中的数据就会丢失.但是在某些情况下,我们希望Redis在重启后能够 ...

  10. Python在Linux下编译安装报错:Makefile:1141:install

    正常情况下执行:./configuremake && make install可以直接安装python,但是在在更新了乌版图后居然报错了!!!检查了一圈,发现乌版图安装了python3 ...