微服务——SpringBoot使用归纳——Spring Boot中的全局异常处理——拦截自定义异常

简介: 本文介绍了在实际项目中如何拦截自定义异常。首先,通过定义异常信息枚举类 `BusinessMsgEnum`,统一管理业务异常的代码和消息。接着,创建自定义业务异常类 `BusinessErrorException`,并在其构造方法中传入枚举类以实现异常信息的封装。最后,利用 `GlobalExceptionHandler` 拦截并处理自定义异常,返回标准的 JSON 响应格式。文章还提供了示例代码和测试方法,展示了全局异常处理在 Spring Boot 项目中的应用价值。

3. 拦截自定义异常

在实际项目中,除了拦截一些系统异常外,在某些业务上,我们需要自定义一些业务异常,比如在微服务中,服务之间的相互调用很平凡,很常见。要处理一个服务的调用时,那么可能会调用失败或者调用超时等等,此时我们需要自定义一个异常,当调用失败时抛出该异常,给 GlobalExceptionHandler 去捕获。

3.1 定义异常信息

由于在业务中,有很多异常,针对不同的业务,可能给出的提示信息不同,所以为了方便项目异常信息管理,我们一般会定义一个异常信息枚举类。比如:

/**

* 业务异常提示信息枚举类

* @author shengwu ni

*/

public enum BusinessMsgEnum {

  /** 参数异常 */

  PARMETER_EXCEPTION("102", "参数异常!"),

  /** 等待超时 */

  SERVICE_TIME_OUT("103", "服务调用超时!"),

  /** 参数过大 */

  PARMETER_BIG_EXCEPTION("102", "输入的图片数量不能超过50张!"),

  /** 500 : 一劳永逸的提示也可以在这定义 */

  UNEXPECTED_EXCEPTION("500", "系统发生异常,请联系管理员!");

  // 还可以定义更多的业务异常

  /**

   * 消息码

   */

  private String code;

  /**

   * 消息内容

   */

  private String msg;

  private BusinessMsgEnum(String code, String msg) {

      this.code = code;

      this.msg = msg;

   }

   // set get方法

}

3.2 拦截自定义异常

然后我们可以定义一个业务异常,当出现业务异常时,我们就抛这个自定义的业务异常即可。比如我们定义一个 BusinessErrorException 异常,如下:

/**

* 自定义业务异常

* @author shengwu ni

*/

public class BusinessErrorException extends RuntimeException {

   

   private static final long serialVersionUID = -7480022450501760611L;


   /**

    * 异常码

    */

   private String code;

   /**

    * 异常提示信息

    */

   private String message;


   public BusinessErrorException(BusinessMsgEnum businessMsgEnum) {

       this.code = businessMsgEnum.code();

       this.message = businessMsgEnum.msg();

   }

// get set方法

}

在构造方法中,传入我们上面自定义的异常枚举类,所以在项目中,如果有新的异常信息需要添加,我们直接在枚举类中添加即可,很方便,做到统一维护,然后再拦截该异常时获取即可。

@ControllerAdvice

@ResponseBody

public class GlobalExceptionHandler {


   private static final Logger logger = LoggerFactory.getLogger(GlobalExceptionHandler.class);

   /**

    * 拦截业务异常,返回业务异常信息

    * @param ex

    * @return

    */

   @ExceptionHandler(BusinessErrorException.class)

   @ResponseStatus(value = HttpStatus.INTERNAL_SERVER_ERROR)

   public JsonResult handleBusinessError(BusinessErrorException ex) {

       String code = ex.getCode();

       String message = ex.getMessage();

       return new JsonResult(code, message);

   }

}

在业务代码中,我们可以直接模拟一下抛出业务异常,测试一下:

@RestController

@RequestMapping("/exception")

public class ExceptionController {


   private static final Logger logger = LoggerFactory.getLogger(ExceptionController.class);


   @GetMapping("/business")

   public JsonResult testException() {

       try {

           int i = 1 / 0;

       } catch (Exception e) {

           throw new BusinessErrorException(BusinessMsgEnum.UNEXPECTED_EXCEPTION);

       }

       return new JsonResult();

   }

}

运行一下项目,测试一下,返回 json 如下,说明我们自定义的业务异常捕获成功:

{"code":"500","msg":"系统发生异常,请联系管理员!"}

4. 总结

本节课程主要讲解了Spring Boot 的全局异常处理,包括异常信息的封装、异常信息的捕获和处理,以及在实际项目中,我们用到的自定义异常枚举类和业务异常的捕获与处理,在项目中运用的非常广泛,基本上每个项目中都需要做全局异常处理。

课程源代码下载地址:戳我下载

目录
相关文章
|
4月前
|
安全 Java Apache
微服务——SpringBoot使用归纳——Spring Boot中集成 Shiro——Shiro 身份和权限认证
本文介绍了 Apache Shiro 的身份认证与权限认证机制。在身份认证部分,分析了 Shiro 的认证流程,包括应用程序调用 `Subject.login(token)` 方法、SecurityManager 接管认证以及通过 Realm 进行具体的安全验证。权限认证部分阐述了权限(permission)、角色(role)和用户(user)三者的关系,其中用户可拥有多个角色,角色则对应不同的权限组合,例如普通用户仅能查看或添加信息,而管理员可执行所有操作。
157 0
|
4月前
|
安全 Java 数据安全/隐私保护
微服务——SpringBoot使用归纳——Spring Boot中集成 Shiro——Shiro 三大核心组件
本课程介绍如何在Spring Boot中集成Shiro框架,主要讲解Shiro的认证与授权功能。Shiro是一个简单易用的Java安全框架,用于认证、授权、加密和会话管理等。其核心组件包括Subject(认证主体)、SecurityManager(安全管理员)和Realm(域)。Subject负责身份认证,包含Principals(身份)和Credentials(凭证);SecurityManager是架构核心,协调内部组件运作;Realm则是连接Shiro与应用数据的桥梁,用于访问用户账户及权限信息。通过学习,您将掌握Shiro的基本原理及其在项目中的应用。
155 0
|
3月前
|
人工智能 Java 数据库
飞算 JavaAI:革新电商订单系统 Spring Boot 微服务开发
在电商订单系统开发中,传统方式耗时约30天,需应对复杂代码、调试与测试。飞算JavaAI作为一款AI代码生成工具,专注于简化Spring Boot微服务开发。它能根据业务需求自动生成RESTful API、数据库交互及事务管理代码,将开发时间缩短至1小时,效率提升80%。通过减少样板代码编写,提供规范且准确的代码,飞算JavaAI显著降低了开发成本,为软件开发带来革新动力。
|
28天前
|
Java API 微服务
Java 21 与 Spring Boot 3.2 微服务开发从入门到精通实操指南
《Java 21与Spring Boot 3.2微服务开发实践》摘要: 本文基于Java 21和Spring Boot 3.2最新特性,通过完整代码示例展示了微服务开发全流程。主要内容包括:1) 使用Spring Initializr初始化项目,集成Web、JPA、H2等组件;2) 配置虚拟线程支持高并发;3) 采用记录类优化DTO设计;4) 实现JPA Repository与Stream API数据访问;5) 服务层整合虚拟线程异步处理和结构化并发;6) 构建RESTful API并使用Springdoc生成文档。文中特别演示了虚拟线程配置(@Async)和StructuredTaskSco
127 0
|
1月前
|
负载均衡 Java API
基于 Spring Cloud 的微服务架构分析
Spring Cloud 是一个基于 Spring Boot 的微服务框架,提供全套分布式系统解决方案。它整合了 Netflix、Zookeeper 等成熟技术,通过简化配置和开发流程,支持服务发现(Eureka)、负载均衡(Ribbon)、断路器(Hystrix)、API网关(Zuul)、配置管理(Config)等功能。此外,Spring Cloud 还兼容 Nacos、Consul、Etcd 等注册中心,满足不同场景需求。其核心组件如 Feign 和 Stream,进一步增强了服务调用与消息处理能力,为开发者提供了一站式微服务开发工具包。
154 0
|
JSON Java 测试技术
看看人家 SpringBoot 的全局异常处理,多么优雅。。。
本篇文章主要介绍的是SpringBoot项目进行全局异常的处理。 SpringBoot全局异常准备
看看人家 SpringBoot 的全局异常处理,多么优雅。。。
|
安全 Java 数据库
SpringBoot+拦截器+自定义异常+自定义注解+全局异常处理简单实现接口权限管理
提到权限管理这块肯定很多人第一想到的就是Springboot Security或者是Shiro安全框架,但本文介绍的并不是这两种,不是因为他们不好用,实在是自己太懒了,我觉得一个拦截器加上其他的一些处理就能满足项目的需求,我又何必去多用一个框架呢,这篇文章也不是去对比谁好谁坏,各位自行抉择。
84158 6
|
Java 编译器 程序员
SpringBoot全局异常处理
在开发软件系统过程中,异常信息是常见的,如何处理系统内部异常,快速定位BUG,是非常考验一位软件开发人员的功底。在软件系统开发过程中,统一自定义异常信息,统一对异常进行捕获处理,这样做能提高软件开发效率,并且使代码看起来更优雅。
493 0
|
JSON 前端开发 Java
SpringBoot全局异常处理(三十)下
SpringBoot全局异常处理(三十)下
327 0
SpringBoot全局异常处理(三十)下

热门文章

最新文章