一张思维导图带你学会Springboot创建全局异常、自定义异常

简介: 一张思维导图带你学会Springboot创建全局异常、自定义异常

思维导图


b9a91c0b95c04cd1a59eec8000d5c62a.png


🌟前言


在开发中,都离不开自定义异常、全局处理异常的使用。比如说在一些网站中看到的系统异常,请联系管理员、网络异常等等,都是通过其处理。如果按照下方图片中的信息展示给用户,谁能看的懂呢?于是这就体现出了自定义异常、全局处理异常的作用。


24beca14437dcc912aedc0da2f64a5e7_01eb56de82ab4c089f68358b107a7779.png


🌟前置知识


@ControllerAdvice:用于标识一个全局异常处理类。

@ExceptionHandler:用于标识全局异常处理类中的方法上,被标记的方法会在发生其特定异常时执行。

@RestControllerAdvice:相当于@ControllerAdvice+@ResponseBody注解的组合。也就是一共有两种实现方式。


方式一:@ControllerAdvice+@ExceptionHandler+@ResponseBody

方式二:@RestControllerAdvice+@ExceptionHandler


执行流程:

  • 当请求到达Controller时,通过AOP代理机制对Controller进行增强。
  • 在AOP增强的过程中,如果请求处理过程中发生异常,AOP拦截器会捕获异常,并将其- 传递给全局异常处理器。
  • 全局异常处理器根据异常类型进行匹配,并调用相应的异常处理方法进行处理。
  • 异常处理方法执行完毕后,返回结果给AOP拦截器,AOP拦截器将结果返回给原始的Controller方法或其他地方。


🌟具体实现步骤


定义自定义异常类


自定义异常类:负责返回特定信息的异常。在实际开发中会根据业务需求进行自定义异常类的划分:订单模块的异常、收货模块的异常,每个模块的异常又包含很多不同的异常码。


思路:

  • 根据业务范围定义见名知意的类名称,比如说订单异常可以为OrderException。因举例我这里起的是SelfException。
  • 继承RuntimenException。
  • 声明异常码、异常信息。
  • 实现有参构造器。目的是为了在throw new XXXException时,自定义异常码、异常信息。

public class SelfException extends RuntimeException{
    //异常码
    private Integer code;
    //异常信息
    private String msg;
    //创建构造器,为了抛出自定义信息的异常
    public SelfException(Integer code,String msg){
        this.code=code;
        this.msg=msg;
    }
    public Integer getCode() {
        return code;
    }
    public void setCode(Integer code) {
        this.code = code;
    }
    public String getMsg() {
        return msg;
    }
    public void setMsg(String msg) {
        this.msg = msg;
    }
}


定义全局异常处理类


全局异常处理类:负责捕获具体的异常或者全局异常,返回JSON格式数据给前端。

思路:

  • 创建全局异常处理类。并用@RestControllerAdvice标识。
  • 创建异常处理方法。并用ExceptionHandler()标识此方法处理的异常。
  • 判断发生的异常是否是SelfException,若是则返回相应的异常码、异常信息。否则返回全局异常。


@RestControllerAdvice
public class SelfExceptionHandler {
//捕获所有异常,若值为SelfException,则捕获SelfException
    @ExceptionHandler(Exception.class)
    public JsonData handle(Exception e){
    //判断异常是否是自定义异常,若是则返回相应的异常码、异常信息。不是则返回全局异常。
        if (e instanceof SelfException){
            SelfException selfException=(SelfException) e;
            return JsonData.buildError(selfException.getCode(), selfException.getMsg());
        }else {
            return JsonData.buildError("系统异常,联系管理员");
        }
    }
}


🌟写在最后


有关于SpringBoot自定义异常、全局处理异常到此就结束了。感谢大家的阅读,希望大家在评论区对此部分内容散发讨论,便于大家学到更多的知识。还有一张处理全局异常的方式是返回页面的方式,感兴趣的大家可以在网上搜搜,现在一般就是用返回JSON格式的进行处理。


目录
打赏
0
1
0
0
5
分享
相关文章
SpringBoot高级并发实践:自定义线程池与@Async异步调用深度解析
SpringBoot高级并发实践:自定义线程池与@Async异步调用深度解析
555 0
springboot-druid数据源的配置方式及配置后台监控-自定义和导入stater(推荐-简单方便使用)两种方式配置druid数据源
这篇文章介绍了如何在Spring Boot项目中配置和监控Druid数据源,包括自定义配置和使用Spring Boot Starter两种方法。
SpringBoot + 通义千问 + 自定义React组件:支持EventStream数据解析的技术实践
【10月更文挑战第7天】在现代Web开发中,集成多种技术栈以实现复杂的功能需求已成为常态。本文将详细介绍如何使用SpringBoot作为后端框架,结合阿里巴巴的通义千问(一个强大的自然语言处理服务),并通过自定义React组件来支持服务器发送事件(SSE, Server-Sent Events)的EventStream数据解析。这一组合不仅能够实现高效的实时通信,还能利用AI技术提升用户体验。
653 2
微服务——SpringBoot使用归纳——Spring Boot中的全局异常处理——处理系统异常
本文介绍了在Spring Boot项目中如何通过创建`GlobalExceptionHandler`类来全局处理系统异常。通过使用`@ControllerAdvice`注解,可以拦截项目中的各种异常,并结合`@ExceptionHandler`注解针对特定异常(如参数缺失、空指针等)进行定制化处理。文中详细展示了处理参数缺失异常和空指针异常的示例代码,并说明了通过拦截`Exception`父类实现统一异常处理的方法。虽然拦截`Exception`可一劳永逸,但为便于问题排查,建议优先处理常见异常,最后再兜底处理未知异常,确保返回给调用方的信息友好且明确。
239 0
微服务——SpringBoot使用归纳——Spring Boot中的全局异常处理——处理系统异常
编写SpringBoot的自定义starter包
通过本文的介绍,我们详细讲解了如何创建一个Spring Boot自定义Starter包,包括自动配置类、配置属性类、`spring.factories`文件的创建和配置。通过自定义Starter,可以有效地复用公共配置和组件,提高开发效率。希望本文能帮助您更好地理解和应用Spring Boot自定义Starter,在实际项目中灵活使用这一强大的功能。
160 17
微服务——SpringBoot使用归纳——Spring Boot中的全局异常处理——拦截自定义异常
本文介绍了在实际项目中如何拦截自定义异常。首先,通过定义异常信息枚举类 `BusinessMsgEnum`,统一管理业务异常的代码和消息。接着,创建自定义业务异常类 `BusinessErrorException`,并在其构造方法中传入枚举类以实现异常信息的封装。最后,利用 `GlobalExceptionHandler` 拦截并处理自定义异常,返回标准的 JSON 响应格式。文章还提供了示例代码和测试方法,展示了全局异常处理在 Spring Boot 项目中的应用价值。
86 0
Spring Boot 自动配置机制:从原理到自定义
Spring Boot 的自动配置机制通过 `spring.factories` 文件和 `@EnableAutoConfiguration` 注解,根据类路径中的依赖和条件注解自动配置所需的 Bean,大大简化了开发过程。本文深入探讨了自动配置的原理、条件化配置、自定义自动配置以及实际应用案例,帮助开发者更好地理解和利用这一强大特性。
733 14
深入探讨了“dubbo+nacos+springboot3的native打包成功后运行出现异常”的原因及解决方案
本文深入探讨了“dubbo+nacos+springboot3的native打包成功后运行出现异常”的原因及解决方案。通过检查GraalVM版本兼容性、配置反射列表、使用代理类、检查配置文件、禁用不支持的功能、查看日志文件、使用GraalVM诊断工具和调整GraalVM配置等步骤,帮助开发者快速定位并解决问题,确保服务的正常运行。
240 1
springboot静态资源目录访问,及自定义静态资源路径,index页面的访问
本文介绍了Spring Boot中静态资源的访问位置、如何进行静态资源访问测试、自定义静态资源路径和静态资源请求映射,以及如何处理自定义静态资源映射对index页面访问的影响。提供了两种解决方案:取消自定义静态资源映射或编写Controller来截获index.html的请求并重定向。
springboot静态资源目录访问,及自定义静态资源路径,index页面的访问
如何将Spring Boot应用程序运行到自定义端口
如何将Spring Boot应用程序运行到自定义端口
386 0
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等

登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问