当前位置: 首页 > 编程笔记 >

springboot全局异常处理代码实例

卞云瀚
2023-03-14
本文向大家介绍springboot全局异常处理代码实例,包括了springboot全局异常处理代码实例的使用技巧和注意事项,需要的朋友参考一下

这篇文章主要介绍了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 错误,全局异常处理起作用,返回指定结果集。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持小牛知识库。

 类似资料:
  • 本文向大家介绍springboot全局异常处理详解,包括了springboot全局异常处理详解的使用技巧和注意事项,需要的朋友参考一下 一、单个controller范围的异常处理 说明: 在controller中加入被@ExceptionHandler修饰的类即可(在该注解中指定该方法需要处理的那些异常类) 该异常处理方法只在当前的controller中起作用 二、全部controller范围内起

  • 统一错误处理 文档:https://eggjs.org/zh-cn/tutorials/restful.html 自定义一个异常基类 // app / exceptions / http_exceptions.js class HttpExceptions extends Error { constructor(msg='服务器异常', code=1, httpCode=400) {

  • 本文向大家介绍Springboot之自定义全局异常处理的实现,包括了Springboot之自定义全局异常处理的实现的使用技巧和注意事项,需要的朋友参考一下 前言: 在实际的应用开发中,很多时候往往因为一些不可控的因素导致程序出现一些错误,这个时候就要及时把异常信息反馈给客户端,便于客户端能够及时地进行处理,而针对代码导致的异常,我们一般有两种处理方式,一种是throws直接抛出,一种是使用try.

  • Middleware: 全局异常处理 我们在岩浆的实例其实已经注意到了,compose 的连接方式,让我们有能力精确控制异常。 Koa中间件最终行为强依赖注册顺序,比如我们这里要引入的异常处理,必须在业务逻辑中间件前注册,才能捕获后续中间件中未捕获异常,回想一下我们的调度器实现的异常传递流程。 <?php class ExceptionHandler implements Middleware

  • springboot全局异常处理器处理顺序问题 在使用异常处理器时,代码 当出现数据库异常时,返回 按理说越精确优先级越高,SQLIntegrityConstraintViolationException继承SQLException,为什么返回的却是被Exception异常捕获?求解答 我尝试注释Exception异常捕获,此时异常能被SQLException捕获

  • 在做android项目开发时,大家都知道如果程序出错了,会弹出来一个强制退出的弹出框,这个本身没什么问题,但是这个UI实在是太丑了,别说用户接受不了,就连我们自己本身可能都接受不了。虽然我们在发布程序时总会经过仔细的测试,但是难免会碰到预料不到的错误。 今天就来自定义一个程序出错时的处理,类似iphone的闪退。(虽然闪退也是用户不愿意看到的,但是在用户体验上明显比那个原生的弹窗好多了) 废话不多