springboot实现全局异常处理及自定义异常类

一、背景简介

在SpringBoot的应用开发过程中,异常处理显得尤为关键。当系统运行出现意外情况时,能够及时捕获异常、快速定位问题和提供友好的提示信息,是系统健壮性和用户体验的保障。本文将介绍如何使用SpringBoot实现全局异常处理并自定义异常类,帮助开发人员快速高效地处理异常信息。

二、目标

实现全局异常处理,处理系统的所有异常,包括运行时异常和非运行时异常,并且能够自定义异常类,将不同类型的异常进行归类。

三、实现步骤

  1. 创建自定义异常类
public class MyException extends RuntimeException {

    private Integer code;
    private String message;

    public MyException(ResultCodeEnum resultCodeEnum) {
        this.code = resultCodeEnum.getCode();
        this.message = resultCodeEnum.getMessage();
    }

    public Integer getCode() {
        return code;
    }

    public String getMessage() {
        return message;
    }
}
  1. 创建全局异常处理类
@ControllerAdvice
public class GlobalExceptionHandler {

    @ExceptionHandler(Exception.class)
    @ResponseBody
    public Result handleException(Exception e) {
        if (e instanceof MyException) {
            MyException myException = (MyException) e;
            return Result.fail(myException.getCode(), myException.getMessage());
        }
        return Result.fail(ResultCodeEnum.SYSTEM_ERROR.getCode(), ResultCodeEnum.SYSTEM_ERROR.getMessage());
    }
}
  1. 配置自定义异常类
@RestController
@RequestMapping("/api")
public class ApiController {

    @GetMapping("/test")
    public Result test() {
        throw new MyException(ResultCodeEnum.PARAM_ERROR);
    }
}

四、效果演示

在访问 /api/test 接口时,会抛出 MyException 异常,然后由全局异常处理类捕获异常并处理,最终返回如下JSON格式的响应体:

{
  "code": 400,
  "message": "参数错误"
}

五、进阶拓展

除了自定义异常类、全局异常处理类以外,我们也可以在异常处理类中添加更多的异常处理方法,处理不同类型的异常。例如,我们可以添加一个 NullPointException 的处理方法:

@ControllerAdvice
public class GlobalExceptionHandler {

    @ExceptionHandler(Exception.class)
    @ResponseBody
    public Result handleException(Exception e) {
        if (e instanceof MyException) {
            MyException myException = (MyException) e;
            return Result.fail(myException.getCode(), myException.getMessage());
        }
        return Result.fail(ResultCodeEnum.SYSTEM_ERROR.getCode(), ResultCodeEnum.SYSTEM_ERROR.getMessage());
    }

    @ExceptionHandler(NullPointerException.class)
    @ResponseBody
    public Result handleNullPointerException(NullPointerException e) {
        return Result.fail(ResultCodeEnum.NULL_POINTER_ERROR.getCode(), ResultCodeEnum.NULL_POINTER_ERROR.getMessage());
    }
}

这样,当系统出现 NullPointerException 异常时,全局异常处理类会自动捕获异常并调用对应的处理方法进行处理。

六、实战示例

以下是一个基于SpringBoot实现全局异常处理及自定义异常类的示例项目:

https://github.com/linlinjava/litemall/blob/master/litemall-core/src/main/java/org/linlinjava/litemall/core/util/ResponseUtil.java

https://github.com/linlinjava/litemall/blob/master/litemall-core/src/main/java/org/linlinjava/litemall/core/exception/GlobalExceptionAdvice.java

七、总结

本文介绍了使用SpringBoot实现全局异常处理及自定义异常类的攻略,其中包含了详细的步骤和示例,并对如何进一步拓展进行了说明。异常处理虽然看似简单,但实际上却是系统开发中非常重要的一环。希望本文能够帮助读者更好地掌握异常处理的相关知识。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:springboot实现全局异常处理及自定义异常类 - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • JavaSpringBoot报错“HeuristicRollbackException”的原因和处理方法

    原因 “HeuristicRollbackException” 错误通常是以下原因引起的: 事务问题:如果您的事务存在问题,则可能会出现此错误。在这种情况下,需要检查您的事务并确保它们正确。 并发问题:如果您的应用程序存在并发问题,则可能会出现此错误。在这种情况下,您需要检查您的应用程序并确保它们正确。 数据库问题:如果您的数据库存在问题,则可能会出现此错误…

    Java 2023年5月4日
    00
  • SpringBoot log打印及输出方式

    SpringBoot是一种快速构建基于Spring框架的应用程序的框架。在应用程序的开发和维护过程中,日志是必不可少的工具。SpringBoot提供了许多日志框架,如Logback、Log4j2和Java Util Logging等。本篇攻略将详细讲解SpringBoot log打印及输出方式,如下: 日志输出级别 SpringBoot使用Logback作为…

    Java 2023年5月26日
    00
  • jsp页面常用的查询及显示方法分析

    JSP页面常用的查询及显示方法分析 JSP是一种用于创建动态Web内容的Java技术。在JSP页面中,查询和显示数据是非常常见的任务,下面将介绍JSP页面中常用的两种查询和显示方法。 1. 使用JDBC查询数据库并将数据显示在JSP页面上 步骤1:导入JDBC驱动程序和建立数据库连接 在JSP页面中,首先需要导入JDBC驱动程序,并建立与数据库的连接。这可以…

    Java 2023年6月15日
    00
  • cmd中javac和java使用及注意事项详解

    当我们需要开发Java程序时,需要使用到JDK提供的工具 javac 和 java。其中 javac 是用于编译Java源代码生成二进制字节码文件,而 java 则是用于运行已经编译好的二进制字节码文件,下面详细介绍一下在cmd中使用javac和java的方法及注意事项。 1. 安装JDK并配置环境变量 在使用javac和java之前,首先需要安装JDK并配…

    Java 2023年5月23日
    00
  • java实现统一异常处理的示例

    下面是“java实现统一异常处理的示例”的完整攻略: 1. 异常处理的重要性 在Java开发中,异常是不可避免的。这就需要我们对异常进行处理,以保证系统的稳定性、可靠性和安全性。Java提供了异常处理机制,但这并不意味着我们在程序中用了try-catch语句,就可以完全不用考虑异常的处理了。相反,正确的异常处理是非常重要的。 2. 统一异常处理的原理 在Ja…

    Java 2023年5月28日
    00
  • 2020最新版SSM框架整合教程

    让我来详细讲解一下“2020最新版SSM框架整合教程”的完整攻略。 1. 准备工作 在整合SSM框架之前,需要安装JDK、Maven以及相应的开发工具,比如IntelliJ IDEA或Eclipse,还需要准备好Web Server,比如Tomcat或Jetty。 2. 创建Maven项目 创建一个Maven Web项目,添加以下依赖: <depend…

    Java 2023年5月20日
    00
  • Java transient 关键字是干啥的

    当Java中的对象被序列化时,它们的所有属性(包括私有属性)都将被保存。在某些情况下,某些属性可能不想被序列化。在这种情况下,使用Java中的transient关键字进行标记,表示该属性不应该被序列化,并且不存储在返回的字节数组中。 在Java中,transient是一个关键字,用于标记类成员变量,通常用于序列化和反序列化。 Markdown 格式 在Mar…

    Java 2023年5月20日
    00
  • 一篇文章带你入门Java修饰符

    一篇文章带你入门Java修饰符 Java中修饰符是控制访问权限和类、变量和方法行为的关键字。在Java中,共有四类修饰符:访问修饰符、非访问修饰符、类修饰符和方法修饰符。接下来将详细介绍这四类修饰符以及它们的使用规范。 一、访问修饰符 访问修饰符 含义 public 所有类可见 protected 同一包内和子类可见 private 仅本类可见 没有修饰符 …

    Java 2023年5月26日
    00
合作推广
合作推广
分享本页
返回顶部