一、全局异常处理

//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. Spring Cloud Gateway 没有链路信息,我 TM 人傻了(上)

    本系列是 我TM人傻了 系列第五期[捂脸],往期精彩回顾: 升级到Spring 5.3.x之后,GC次数急剧增加,我TM人傻了 这个大表走索引字段查询的 SQL 怎么就成全扫描了,我TM人傻了 获取异 ...

  2. 执行sudo apt-get update,连接失败

    问题:sudo apt-get update连接失败 错误:1 http://cn.mirrors.ustc.edu.cn/ubuntu bionic InRelease 连接失败 [IP: 218. ...

  3. 使用jemeter构造各种变量数据

    使用手动创建测试数据太麻烦,因此考虑用jmeter写了一些创建测试数据的脚本,针对那些变量非固定的数据可以利用函数来实现 通过函数助手添加各种变量数据 Tools--->函数助手 1:生成当前时 ...

  4. Linux文件(夹)属性与权限

    文件属性与权限,文件权限设置 参考资料:鸟哥的Linux私房菜 用户与用户组 Linux系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这 ...

  5. Loj#116-[模板]有源汇有上下界最大流

    正题 题目链接:https://loj.ac/p/116 题目大意 \(n\)个点\(m\)条边的一张图,每条边有流量上下限制,求源点到汇点的最大流. 解题思路 先别急着求上面那个,考虑一下怎么求无源 ...

  6. CF1375F-Integer Game【交互】

    正题 题目链接:https://www.luogu.com.cn/problem/CF1375F 题目大意 给出\(a,b,c\).先手每次指定一个数\(k\),然后后手指定一个数字加上\(k\),若 ...

  7. 数据库的规范和SQL优化技巧总结

    现总结工作与学习中关于数据库的规范设计与优化技巧 1.规范背景与目的 MySQL数据库与 Oracle. SQL Server 等数据库相比,有其内核上的优势与劣势.我们在使用MySQL数据库的时候需 ...

  8. 03 依赖注入--01控制反转、IoC模式

    控制反转Inversion of Control DI和IoC几乎都是成对出现的,我们在理解依赖注入之前首先要弄明白什么是IoC,也就是控制反转,体现的就是控制权的转移,即控制权原来在A中,现在需要B ...

  9. 解决联想R720双系统Ubuntu16.04的无线网卡开启问题及信号不稳定

    问题一:1.问题描述笔记本型号:Lenovo r720笔记本(i5-7300hq,gtx1060 maxq 6g),默认装入Win10系统,然而当装入Ubuntu16.04双系统时,会出现无线网卡(型 ...

  10. c# 类型安全语言

    所谓的安全性语言其本质是有关类型操作的一种规范,即不能将一种类型转换为另一种类型. c#作为一种安全性语言,允许合理的类型转换,但是不能将两个完全不同的类型相互转换. c#允许开发者将对象转换为它的实 ...