这篇文章主要介绍了springboot 全局异常处理和统一响应对象,主要包括SpringBoot默认的异常处理机制和SpringBoot全局异常处理,本文给大家介绍的非常详细,需要的朋友可以参考下
springboot异常处理
SpringBoot 默认的异常处理机制
默认情况,SpringBoot 提供两种不同响应方式
- 一种是浏览器客户端请求一个不存在的页面或服务端异常时,SpringBoot默认会响应一个
html
- 另一种是使用
postman
等调试工具请求不存在的url或服务端异常时,默认返回json信息
SpringBoot 全局异常处理
一般我们不会将错误信息返回前端,自己去try catch
捕获异常,但有个问题:每个方法都这样捕获异常,肯定是不合适,这是我们就需要全局的异常处理了。
@RestController
public class ExceptionController {
@GetMapping("exceptionA")
public void methodA() {
try {
int a = 100 / 0;
} catch (Exception e) {
e.printStackTrace();
}
}
}
1. 局部异常处理
使用@EceptionHandle
注解实现某个类的局部异常处理
@RestController
public class ExceptionController {
@GetMapping("exceptionA")
public void methodA() {
int a = 100 / 0;
}
/**
* 局部异常处理
*/
@ExceptionHandler(Exception.class)
public String exHandler(Exception e) {
// 判断发生异常的类型是除0异常则做出响应
if (e instanceof ArithmeticException) {
return "发生了除0异常";
}
// 未知的异常做出响应
return "发生了未知异常";
}
}
2. 全局异常处理
使用@ControllerAdvice
+@ExceptionHandler
注解实现全局异常处理
自定义一个异常类
@RestControllerAdvice
public class DefaultException {
@ExceptionHandler({NullPointerException.class})
public String exception(NullPointerException exception) {
return "空指针异常";
}
@ExceptionHandler({IndexOutOfBoundsException.class})
public String exception(IndexOutOfBoundsException exception) {
return "数组越界异常";
}
}
增加一个异常方法测试,由于局部异常优先级更高先注释掉了
@RestController
public class ExceptionController {
@GetMapping("exceptionA")
public void methodA() {
int a = 100 / 0;
}
@GetMapping("exceptionB")
public void methodB() {
List list = new ArrayList<>();
System.out.println(list.get(0));
}
/**
* 局部异常处理
*/
//@ExceptionHandler(Exception.class)
//public String exHandler(Exception e) {
// // 判断发生异常的类型是除0异常则做出响应
// if (e instanceof ArithmeticException) {
// return "发生了除0异常";
// }
// // 未知的异常做出响应
// return "发生了未知异常";
/
沃梦达教程
本文标题为:springboot 全局异常处理和统一响应对象的处理方式
![](/xwassets/images/pre.png)
![](/xwassets/images/next.png)
猜你喜欢
- SpringBoot使用thymeleaf实现一个前端表格方法详解 2023-06-06
- 基于Java Agent的premain方式实现方法耗时监控问题 2023-06-17
- 深入了解Spring的事务传播机制 2023-06-02
- JSP 制作验证码的实例详解 2023-07-30
- Java实现顺序表的操作详解 2023-05-19
- Java中的日期时间处理及格式化处理 2023-04-18
- ExecutorService Callable Future多线程返回结果原理解析 2023-06-01
- JSP页面间传值问题实例简析 2023-08-03
- Spring Security权限想要细化到按钮实现示例 2023-03-07
- Springboot整合minio实现文件服务的教程详解 2022-12-03