欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

springboot全局异常处理代码实例

程序员文章站 2023-11-17 21:27:34
这篇文章主要介绍了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 错误,全局异常处理起作用,返回指定结果集。

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