详解如何在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全局异常处理的资料请关注脚本之家其它相关文章!

相关文章

  • SpringCloud中的Feign服务间的调用详解

    SpringCloud中的Feign服务间的调用详解

    这篇文章主要介绍了SpringCloud中的Feign服务间的调用详解,Feign 是一个声明式的 REST 客户端,它能让 REST 调用更加简单,Feign 供了 HTTP 请求的模板,通过编写简单的接口和插入注解,就可以定义好 HTTP 请求的参数、格式、地址等信息,需要的朋友可以参考下
    2024-01-01
  • Java中的值传递和引用传递实例介绍

    Java中的值传递和引用传递实例介绍

    java 中没有引用传递,都是值传递的,可以通过传递副本修改对象的,副本交换,并不影响原引用
    2013-09-09
  • 记一次集成swagger2(Knife4j)在线文档提示:Knude4j文档请求异常的解决办法

    记一次集成swagger2(Knife4j)在线文档提示:Knude4j文档请求异常的解决办法

    Knife4j是一个集Swagger2 和 OpenAPI3为一体的增强解决方案,下面这篇文章主要给大家介绍了关于一次集成swagger2(Knife4j)在线文档提示:Knude4j文档请求异常的解决办法,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-02-02
  • Spring Security整合KeyCloak保护Rest API实现详解

    Spring Security整合KeyCloak保护Rest API实现详解

    这篇文章主要为大家介绍了Spring Security整合KeyCloak保护Rest API实现实例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-11-11
  • Spring Boot中自动化配置的利弊以及解决方法

    Spring Boot中自动化配置的利弊以及解决方法

    这篇文章主要给大家介绍了关于Spring Boot中自动化配置的利弊以及解决方法,文中通过示例代码介绍的非常详细,对大家学习或者使用Spring Boot具有一定的参考学习价值,需要的朋友们下面来一起看看吧。
    2017-08-08
  • 聊聊Object类中的wait()和notify()方法

    聊聊Object类中的wait()和notify()方法

    这篇文章主要介绍了Object类中的wait()和notify()方法,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-09-09
  • 将BigDecimal转成字符串为科学计数法的踩坑记录

    将BigDecimal转成字符串为科学计数法的踩坑记录

    这篇文章主要介绍了将BigDecimal转成字符串为科学计数法的踩坑记录,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-06-06
  • Java网络编程基础详解

    Java网络编程基础详解

    网络编程是指编写运行在多个设备(计算机)的程序,这些设备都通过网络连接起来。本文介绍了一些网络编程基础的概念,并用Java来实现TCP和UDP的Socket的编程,来让读者更好的了解其原理
    2021-08-08
  • JAVA多线程和并发基础面试问答(翻译)

    JAVA多线程和并发基础面试问答(翻译)

    多线程和并发问题是Java技术面试中面试官比较喜欢问的问题之一。在这里,从面试的角度列出了大部分重要的问题,但是你仍然应该牢固的掌握Java多线程基础知识来对应日后碰到的问题
    2014-09-09
  • java通过isAccessAllowed方法实现访问控制

    java通过isAccessAllowed方法实现访问控制

    在Web应用开发中,使用Apache Shiro框架的isAccessAllowed方法可以有效管理用户的访问权限,本文详细解析了该方法的实现过程,包括用户身份验证、权限判断和安全性分析,下面就一起来了解一下
    2024-09-09

最新评论