详解如何在SpringBoot项目中使用全局异常处理

 更新时间:2022年10月19日 16:44:49   作者:picacho_pkq  
在完整的项目开发中,异常的出现几乎是无法避免的;如果凡是有可能出现异常的地方,我们都手动的使用try-catch将其捕获的话,会使得代码显得十分臃肿并且后期不好维护。本文介绍了pringBoot项目中使用全局异常处理的方法,需要的可以参考一下

在完整的项目开发中,异常的出现几乎是无法避免的;如果凡是有可能出现异常的地方,我们都手动的使用try-catch将其捕获的话,虽然也能达到处理异常的效果,但是这样做会使得代码显得十分臃肿并且后期不好维护,也不利于多人系统开发。

在Spring Boot中提供了统一处理异常的方法,SpringBoot中有一个ControllerAdvice的注解,使用该注解表示开启了全局异常的捕获,我们只需在自定义一个方法使用ExceptionHandler注解然后定义捕获异常的类型即可对这些捕获的异常进行统一的处理。接下来就用一个小demo来演示一下全局异常处理的方法。

1. 创建自定义异常

接着上一篇在Spring Boot项目中使用统一返回结果一文中,继续添加全局异常处理部分。

NotLoginException.java

@Data
@NoArgsConstructor
@AllArgsConstructor
@ToString
public class NotLoginException extends RuntimeException{

    private Integer errorCode;
    private String message;

}

2.创建全局异常处理器

定义全局异常处理器,用来捕获项目中抛出的自定义异常和普通异常,然后按照统一的数据格式返回给前端。在项目中不管是返回失败结果,还是返回成功结果,我们都统一返回数据的格式。

MyExceptionHandler.java

@ControllerAdvice
public class MyExceptionHandler {

    /**
     * 捕获我们自定义的异常
     * @param notLoginException
     * @return
     */
    @ExceptionHandler(NotLoginException.class)
    @ResponseBody
    public Result notLoginExceptionHandler(NotLoginException notLoginException){
        return ResultGenerator.genErrorResult(notLoginException.getErrorCode(), notLoginException.getMessage());
    }

    /**
     * 捕获其他异常
     * @param exception
     * @return
     */
    @ExceptionHandler(Exception.class)
    @ResponseBody
    public Result otherException(Exception exception){
        return ResultGenerator.genErrorResult(Constants.RESULT_CODE_SERVER_ERROR, exception.getMessage());
    }


    // 可以定义区分更细粒度的异常,然后在此处进行捕获

}

3.创建测试控制器

ExceptionController.java

@Controller
public class ExceptionController {


    @GetMapping("/notLoginException/{id}")
    @ResponseBody
    public Result notLoginException(@PathVariable("id") Integer id){
        if(id != null && id == 1){
            // 抛出一个自定义的异常
            throw new NotLoginException(Constants.RESULT_CODE_BAD_REQUEST, "没有登陆");  // 这里一般会定一个枚举,定义每一个状态码对应的信息
        }
        return ResultGenerator.genSuccessResult();
    }


    @GetMapping("/exception")
    @ResponseBody
    public Result exception(){
        int num = 1 / 0;
        return ResultGenerator.genSuccessResult();
    }
}

测试自定义异常,先正常给参数,接着给错误参数,让其抛出异常。

测试其他异常。

在Spring Boot项目中全局异常处理的方法大致相同,只需要前期制定好需要处理那些异常,然后定义好枚举来映射异常信息,采用上述方法统一处理即可。

以上就是详解如何在SpringBoot项目中使用全局异常处理的详细内容,更多关于SpringBoot全局异常处理的资料请关注脚本之家其它相关文章!

相关文章

  • Java实现FIFO功能的完整代码实践

    Java实现FIFO功能的完整代码实践

    在软件开发中,队列(Queue)是一种常见的数据结构,其特点是先进先出(FIFO,First In First Out),FIFO 队列在生产者-消费者模型、任务调度、缓冲区管理等场景中具有广泛的应用,本文给大家介绍了Java实现FIFO功能的完整代码实践,需要的朋友可以参考下
    2025-03-03
  • 新版IDEA使用Spring Initializr创建工程的两种方法

    新版IDEA使用Spring Initializr创建工程的两种方法

    这篇文章主要介绍了新版IDEA使用Spring Initializr创建工程(两种方法,官方工具和IDEA),文中通过代码示例和图文结合的方式给大家讲解的非常详细,具有一定的参考价值,需要的朋友可以参考下
    2024-10-10
  • Java 二叉树遍历特别篇之Morris遍历

    Java 二叉树遍历特别篇之Morris遍历

    二叉树的遍历(traversing binary tree)是指从根结点出发,按照某种次序依次访问二叉树中所有的结点,使得每个结点被访问依次且仅被访问一次。四种遍历方式分别为:先序遍历、中序遍历、后序遍历、层序遍历
    2021-11-11
  • java 中String.equals和==的比较

    java 中String.equals和==的比较

    这篇文章主要介绍了java 中String.equals和==的比较的相关资料,需要的朋友可以参考下
    2017-08-08
  • Shell脚本管理Java应用程序的高效方法

    Shell脚本管理Java应用程序的高效方法

    在软件开发中,管理和监控 Java 应用程序的运行状态变得愈加重要,本文将分享一个自用的简单但高效的 Shell 脚本,帮助轻松管理 JAR 包的启动、停止和日志管理,需要的朋友可以参考下
    2024-09-09
  • Java8新特性之Lambda表达式浅析

    Java8新特性之Lambda表达式浅析

    这篇文章主要介绍了Java8新特性之Lambda表达式,本文着重讲解了Lambda表达式的语法部份,需要的朋友可以参考下
    2014-06-06
  • 在SpringBoot框架中实现打印响应的日志

    在SpringBoot框架中实现打印响应的日志

    这篇文章主要介绍了在SpringBoot框架中实现打印响应的日志,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-05-05
  • 使用springboot跳转到指定页面和(重定向,请求转发的实例)

    使用springboot跳转到指定页面和(重定向,请求转发的实例)

    这篇文章主要介绍了使用springboot跳转到指定页面和(重定向,请求转发的实例),具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-12-12
  • Spring MVC项目中的异常处理详解

    Spring MVC项目中的异常处理详解

    在Web开发中 我们经常会需要处理各种异常,这篇文章主要给大家介绍了关于Spring MVC项目中异常处理的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-06-06
  • Java try catch finally异常处理组合详解

    Java try catch finally异常处理组合详解

    这篇文章主要介绍了Java try catch finally异常处理组合详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-05-05

最新评论