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

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

GlobalExceptionHandler 是什么

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

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

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

demo

@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是互补的机制,可以在应用程序中同时使用来提高应用程序的可靠性和健壮性。

@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异常处理机制内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 详解用maven将dubbo工程打成jar包运行

    详解用maven将dubbo工程打成jar包运行

    这篇文章主要介绍了详解用maven将dubbo工程打成jar包运行,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-04-04
  • nacos配置中心的配置修改之后,无需重启服务的实现过程

    nacos配置中心的配置修改之后,无需重启服务的实现过程

    本文介绍Nacos配置自动刷新的两种方式:@RefreshScope注解和@ConfigurationProperties,强调需将配置写入当前服务的配置文件以确保优先加载和动态更新,避免重启服务
    2025-08-08
  • Mybatis逆向工程笔记小结

    Mybatis逆向工程笔记小结

    MyBatis官方为我们提供了一个逆向工程,通过这个逆向工程,只需要建立好数据表,MyBatis就会根据这个表自动生成pojo类、mapper接口、sql映射文件,本文主要介绍了Mybatis逆向工程笔记小结,具有一定的参考价值,感兴趣的可以了解一下
    2024-05-05
  • 如何使用Java完成Socket通信

    如何使用Java完成Socket通信

    这篇文章主要介绍了如何使用Java完成Socket通信问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-09-09
  • Spring security实现权限管理示例

    Spring security实现权限管理示例

    这篇文章主要介绍了Spring security实现权限管理示例,这里整理了详细的代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
    2017-01-01
  • MyBatis拦截器分表实践分享

    MyBatis拦截器分表实践分享

    部门内有一些亿级别核心业务表增速非常快,增量日均100W,但线上业务只依赖近一周的数据,随着数据量的迅速增长,慢SQL频发,数据库性能下降,系统稳定性受到严重影响,本篇文章,将分享如何使用MyBatis拦截器低成本的提升数据库稳定性,需要的朋友可以参考下
    2024-01-01
  • 浅析Spring IOC 依赖查找你需要知道的几种方式

    浅析Spring IOC 依赖查找你需要知道的几种方式

    这篇文章主要介绍了浅析Spring IOC 依赖查找的几种方式,Spring是Java面试中最常考的,学Java的小伙伴快来看看吧
    2021-08-08
  • springboot集成redisson的三种方式

    springboot集成redisson的三种方式

    本文主要介绍了springboot集成redisson的三种方式,包含自定义配置+手动注入,使用Yaml方式批量读取配置和spring boot自动配置类这三种,具有一定的参考价值,感兴趣的可以了解一下
    2024-03-03
  • SpringBoot优化接口响应时间的九个技巧

    SpringBoot优化接口响应时间的九个技巧

    在实际开发中,提升接口响应速度是一件挺重要的事,特别是在面临大量用户请求的时候,本文为大家整理了9个SpringBoot优化接口响应时间的技巧,希望对大家有所帮助
    2024-01-01
  • Java从零编写吃货联盟订餐系统全程讲解

    Java从零编写吃货联盟订餐系统全程讲解

    这篇文章主要介绍了Java订餐系统,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-12-12

最新评论