SpringBoot中GlobalExceptionHandler异常处理机制详细说明

 更新时间:2024年03月01日 10:30:14   作者:小汤汤汤汤  
Spring Boot的GlobalExceptionHandler是一个全局异常处理器,用于捕获和处理应用程序中发生的所有异常,这篇文章主要给大家介绍了关于Java中GlobalExceptionHandler异常处理机制的相关资料,需要的朋友可以参考下

Java技术迷

GlobalExceptionHandler 是什么

GlobalExceptionHandler是一个程序中的异常处理机制,可以在应用程序中捕获和处理未被处理的异常。它是一个全局异常处理器,可以截取应用程序中的任何异常并执行特定的操作,例如记录异常、生成错误报告、通知开发人员或用户、回滚事务等。

使用GlobalExceptionHandler,可以在应用程序的任何层次上捕获异常,包括控制器、服务、数据访问层等,而不需要在每个方法中都进行异常处理。它可以减少代码重复性,提高代码可读性和可维护性。

常见的GlobalExceptionHandler包括Spring框架中的@ControllerAdvice注解和.NET框架中的全局异常过滤器。这些处理器可以用来截取异常,并执行相应的操作,例如将异常转化为HTTP错误代码,记录异常信息到日志文件中等。

demo

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
@ControllerAdvice
public class GlobalExceptionHandler {
 
    @ExceptionHandler(value = { InvalidRequestException.class })
    public ResponseEntity<Object> handleInvalidRequestException(InvalidRequestException ex) {
        // 记录异常信息到日志文件
        log.error("Invalid request: ", ex);
 
        // 返回HTTP错误代码和异常信息
        return new ResponseEntity<>(ex.getMessage(), HttpStatus.BAD_REQUEST);
    }
 
    @ExceptionHandler(value = { ResourceNotFoundException.class })
    public ResponseEntity<Object> handleResourceNotFoundException(ResourceNotFoundException ex) {
        // 记录异常信息到日志文件
        log.error("Resource not found: ", ex);
 
        // 返回HTTP错误代码和异常信息
        return new ResponseEntity<>(ex.getMessage(), HttpStatus.NOT_FOUND);
    }
 
    @ExceptionHandler(value = { Exception.class })
    public ResponseEntity<Object> handleException(Exception ex) {
        // 记录异常信息到日志文件
        log.error("An exception occurred: ", ex);
 
        // 返回HTTP错误代码和异常信息
        return new ResponseEntity<>(ex.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR);
    }
}

他会捕获异常,并处理异常。

和hystrix有什么关系

GlobalExceptionHandler和Hystrix都是处理应用程序中异常的机制,但它们的目的和作用略有不同。

GlobalExceptionHandler是一个全局异常处理器,用于捕获和处理未被处理的异常。它的作用是将异常信息记录到日志文件中、返回HTTP错误代码等。GlobalExceptionHandler通常被用于处理预期的异常,例如输入错误、无效的请求等。

Hystrix是一个开源的库,用于实现分布式系统的容错机制。它主要用于处理服务调用时的失败和超时问题,通过提供各种熔断机制来增强应用程序的健壮性和可靠性。Hystrix提供了服务隔离、服务熔断、线程池隔离等多种机制来防止由于服务调用失败或超时而导致的雪崩效应。

虽然GlobalExceptionHandler和Hystrix都用于处理应用程序中的异常,但它们的目的和使用场景不同。GlobalExceptionHandler通常用于处理预期的异常,例如输入错误、无效的请求等,而Hystrix主要用于处理服务调用时的失败和超时问题。因此,GlobalExceptionHandler和Hystrix是互补的机制,可以在应用程序中同时使用来提高应用程序的可靠性和健壮性。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
@Service
public class ProductService {
 
    @Autowired
    private ProductClient productClient;
 
    @HystrixCommand(fallbackMethod = "getProductFallback")
    public Product getProductById(Long id) {
        return productClient.getProductById(id);
    }
 
    public Product getProductFallback(Long id) {
        // 返回默认的产品信息
        return new Product(0L, "Default Product", BigDecimal.ZERO);
    }
}

总结 

到此这篇关于Java中GlobalExceptionHandler异常处理机制的文章就介绍到这了,更多相关GlobalExceptionHandler异常处理机制内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

蓄力AI

微信公众号搜索 “ 脚本之家 ” ,选择关注

程序猿的那些事、送书等活动等着你

原文链接:https://blog.csdn.net/Maoxim/article/details/129417850

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权/违法违规/事实不符,请将相关资料发送至 reterry123@163.com 进行投诉反馈,一经查实,立即处理!

相关文章

  • java中匿名内部类解读分析

    java中匿名内部类解读分析

    本篇文章介绍了,java中匿名内部类解读分析。需要的朋友参考下
    2013-05-05
  • java基于QuartzJobBean实现定时功能的示例代码

    java基于QuartzJobBean实现定时功能的示例代码

    QuartzJobBean是Quartz框架中的一个抽象类,用于定义和实现可由Quartz调度的作业,本文主要介绍了java基于QuartzJobBean实现定时功能的示例代码,具有一定的参考价值,感兴趣可以了解一下
    2023-09-09
  • Java实现的日期处理类完整实例

    Java实现的日期处理类完整实例

    这篇文章主要介绍了Java实现的日期处理类,结合完整实例形式分析了Java针对日期的获取、运算、转换等相关操作技巧,需要的朋友可以参考下
    2017-09-09
  • java多线程之定时器Timer的使用详解

    java多线程之定时器Timer的使用详解

    本篇文章主要介绍了java多线程之定时器Timer的使用详解,Time类主要负责完成定时计划任务的功能,有兴趣的可以了解一下。
    2017-04-04
  • SpringBoot Kafka 整合使用及安装教程

    SpringBoot Kafka 整合使用及安装教程

    这篇文章主要介绍了SpringBoot Kafka 整合使用及安装教程,本文图文并茂给大家介绍的非常详细,具有一定的参考借鉴价值 ,需要的朋友可以参考下
    2019-07-07
  • SpringBoot使用FreeMarker模板发送邮件

    SpringBoot使用FreeMarker模板发送邮件

    这篇文章主要为大家详细介绍了SpringBoot使用FreeMarker模板发送邮件,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-04-04
  • jfreechart画折线图的方法

    jfreechart画折线图的方法

    这篇文章主要为大家详细介绍了jfreechart画折线图的方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-06-06
  • spring data JPA 中的多属性排序方式

    spring data JPA 中的多属性排序方式

    这篇文章主要介绍了spring data JPA 中的多属性排序方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-02-02
  • Java使用跳转结构实现队列和栈流程详解

    Java使用跳转结构实现队列和栈流程详解

    这篇文章主要介绍了Java使用跳转结构实现队列和栈流程,连续结构和跳转结构是数据结构中常见的两种基本数据结构,而我们本次的主角栈和队列都 既可以使用使用跳转结构实现也可以使用连续结构实现
    2023-04-04
  • 什么是jsoup及jsoup的使用

    什么是jsoup及jsoup的使用

    jsoup是一款基于Java的HTML解析器,它提供了一套非常省力的API,不但能直接解析某个URL地址、HTML文本内容,而且还能通过类似于DOM、CSS或者jQuery的方法来操作数据,所以 jsoup 也可以被当做爬虫工具使用,这篇文章主要介绍了什么是jsoup及jsoup的使用,需要的朋友可以参考下
    2023-10-10

最新评论