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
  • asp之家 软件编程 m.aspxhome.com