springboot全局异常处理代码实例
作者:天际星痕 时间:2023-02-05 20:41:36
这篇文章主要介绍了springboot全局异常处理代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
前言:
开发中异常的处理必不可少,常用的就是 throw 和 try catch,这样一个项目到最后会出现很多冗余的代码,使用全局异常处理避免过多冗余代码。
全局异常处理:
1、pom 依赖(延续上一章代码):
<dependencies>
<!-- Spring Boot Web 依赖 -->
<!-- Web 依赖 - 包含了 spring-boot-starter-validation 依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- Spring Boot Test 依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- spring-boot整合mybatis -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.2</version>
</dependency>
<!-- mysql驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<!-- alibaba的druid数据库连接池 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.0</version>
</dependency>
<!--lombok依赖-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.18</version>
</dependency>
<!-- fastjson 依赖添加 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.31</version>
</dependency>
</dependencies>
2、公共的结果类封装:
这里简单封装,实际根据自己业务需求去封装。
@Getter
@Setter
public class ApiResult {
// 响应业务状态
private Integer status;
// 响应消息
private String msg;
// 响应中的数据
private Object data;
public static ApiResult build(Integer status, String msg, Object data) {
return new ApiResult(status, msg, data);
}
public static ApiResult ok(Object data) {
return new ApiResult(data);
}
public static ApiResult ok() {
return new ApiResult(null);
}
public ApiResult() { }
public static ApiResult build(Integer status, String msg) {
return new ApiResult(status, msg, null);
}
public ApiResult(Integer status, String msg, Object data) {
this.status = status;
this.msg = msg;
this.data = data;
}
public ApiResult(Object data) {
this.status = 200;
this.msg = "OK";
this.data = data;
}
}
3、添加全局异常处理类(在入口函数下的包中新建):
/**
* 全局异常处理 Handler
* @ControllerAdvice 配置控制器通知
* annotations 属性: 指定我们需要拦截的注解,一个或多个(多个加到大括号中,逗号分隔)
*/
// @RestControllerAdvice = @ResponseBody + @ControllerAdvice
@RestControllerAdvice(annotations = {RestController.class})
@Slf4j
public class GlobalExceptionHandler {
/**
* 默认统一异常处理方法
* @ExceptionHandler 注解用来配置需要拦截的异常类型, 也可以是自定义异常
*/
@ExceptionHandler(Exception.class)
// 此处可以指定返回的状态码 和 返回 结果说明
// @ResponseStatus(reason = "exception",value = HttpStatus.BAD_REQUEST)
public Object runtimeExceptionHandler(Exception e) {
// 打印异常信息到控制台
e.printStackTrace();
log.error("请求出现异常,异常信息为: {}", e.getMessage());
// 使用公共的结果类封装返回结果, 这里我指定状态码为 400
return ApiResult.build(400, e.getMessage());
}
}
4、异常测试类:
/**
* 异常处理测试 controller
*/
@RestController
@Slf4j
public class ExceptionController {
@RequestMapping(value = "/exception/{number}")
public ApiResult exception(@PathVariable int number) {
int res = 10 / number;
log.info(">>>>>结果number为: {}", res);
return ApiResult.ok();
}
}
5、测试:
5.1、请求接口:http://localhost:8080/exception/1 结果正常
5.2、请求接口:http://localhost:8080/exception/0 出现除以 0 错误,全局异常处理起作用,返回指定结果集。
来源:https://www.cnblogs.com/wjqhuaxia/p/12148905.html
标签:spring,boot,全局,异常,处理
0
投稿
猜你喜欢
Java+Selenium实现文件上传下载功能详解
2021-06-23 23:33:23
java实现KFC点餐系统
2021-09-06 11:36:34
springboot中通过lua脚本来获取序列号的方法
2023-05-05 04:25:44
关于重写equals()方法和hashCode()方法及其简单的应用
2023-08-01 06:48:13
Android实现今日头条订阅频道效果
2021-10-29 23:30:00
基于mvc5+ef6+Bootstrap框架实现身份验证和权限管理
2023-07-08 09:25:22
Android studio 出现错误Run with --stacktrace option to get the stack trace. Run with --info or --debu
2022-10-25 09:43:15
如何实现bean初始化摧毁方法的注入
2023-07-22 05:14:31
Java利用MultipartFile实现上传多份文件的代码
2023-11-25 11:29:13
浅谈Maven的build生命周期和常用plugin
2022-11-03 01:47:52
Java详细分析String类与StringBuffer和StringBuilder的使用方法
2022-04-23 15:23:30
解决EditText不显示光标的三种方法(总结)
2023-09-19 08:05:10
mybatis insert返回主键代码实例
2022-04-08 02:24:01
C#中const,readonly和static关键字的用法介绍
2021-08-17 15:33:45
Android 两个Fragment之间传递数据实例详解
2022-06-23 19:30:09
android简单自定义View实现五子棋
2023-06-01 19:30:38
C#生成注册码的实例代码
2022-05-16 23:35:58
java调用oracle分页存储过程示例
2021-06-08 12:44:16
关于Maven混合配置私有仓库和公共仓库的问题
2021-10-15 20:30:51
Java扩展库RxJava的基本结构与适用场景小结
2022-12-27 10:03:15