若依框架中如何自定义全局异常处理

2025-06发布2次浏览

在若依框架(RuoYi)中,自定义全局异常处理是一项非常重要的功能,它能够帮助我们统一管理系统的异常逻辑,提升用户体验,并减少重复代码。下面将详细介绍如何在若依框架中实现自定义的全局异常处理。


1. 全局异常处理的基本概念

全局异常处理的核心是通过@ControllerAdvice注解来捕获控制器层的异常,并对其进行统一处理。这种方式可以避免在每个控制器方法中单独编写异常处理逻辑,从而提高代码的可维护性和一致性。


2. 若依框架中的异常处理机制

若依框架已经内置了基本的异常处理机制,主要依赖于GlobalExceptionHandler类。该类使用了@ControllerAdvice注解,用于捕获并处理全局范围内的异常。默认情况下,若依框架会处理一些常见的异常类型,例如:

  • BusinessException:业务异常。
  • UnauthorizedException:未授权异常。
  • ForbiddenException:禁止访问异常。

然而,在实际开发中,我们可能需要根据项目需求扩展或修改这些异常处理逻辑。


3. 自定义全局异常处理步骤

3.1 创建自定义异常类

首先,我们需要定义一个自定义异常类,以便在业务逻辑中抛出特定的异常。以下是一个示例:

public class CustomException extends RuntimeException {
    private Integer code; // 异常状态码

    public CustomException(String message, Integer code) {
        super(message);
        this.code = code;
    }

    public Integer getCode() {
        return code;
    }
}

3.2 创建全局异常处理器

接下来,创建一个全局异常处理器类,继承若依框架的BaseController类(如果适用),并使用@ControllerAdvice注解将其标记为全局异常处理器。

import com.ruoyi.common.core.domain.AjaxResult;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;

@RestControllerAdvice
public class GlobalExceptionHandler {

    /**
     * 处理自定义异常
     */
    @ExceptionHandler(CustomException.class)
    public AjaxResult handleCustomException(CustomException e) {
        Integer code = e.getCode();
        String message = e.getMessage();
        return AjaxResult.error(code, message);
    }

    /**
     * 处理其他未知异常
     */
    @ExceptionHandler(Exception.class)
    public AjaxResult handleException(Exception e) {
        e.printStackTrace(); // 打印堆栈信息,便于排查问题
        return AjaxResult.error("系统繁忙,请稍后再试!");
    }
}

3.3 在业务逻辑中抛出自定义异常

在业务逻辑中,我们可以根据条件抛出自定义异常。例如:

if (someCondition) {
    throw new CustomException("这是一个自定义异常", 500);
}

4. 配合前端展示

在若依框架中,通常使用AjaxResult作为返回值对象。因此,当后端捕获到异常时,可以通过AjaxResult.error()方法返回错误信息。前端接收到该信息后,可以根据状态码和消息进行相应的提示。


5. 异常处理流程图

以下是整个异常处理流程的Mermaid代码表示:

graph TD
    A[请求进入] --> B{是否发生异常}
    B -- 是 --> C[捕获异常]
    C --> D{是否为自定义异常}
    D -- 是 --> E[返回自定义错误信息]
    D -- 否 --> F[返回通用错误信息]
    B -- 否 --> G[正常返回数据]

6. 注意事项

  1. 异常分类:尽量对异常进行分类,例如分为业务异常、系统异常等,以便更精细地控制异常处理逻辑。
  2. 日志记录:在全局异常处理器中,建议对异常进行日志记录,方便后续排查问题。
  3. 状态码设计:确保状态码的设计合理且统一,避免混乱。