在若依框架(RuoYi)中,自定义全局异常处理是一项非常重要的功能,它能够帮助我们统一管理系统的异常逻辑,提升用户体验,并减少重复代码。下面将详细介绍如何在若依框架中实现自定义的全局异常处理。
全局异常处理的核心是通过@ControllerAdvice
注解来捕获控制器层的异常,并对其进行统一处理。这种方式可以避免在每个控制器方法中单独编写异常处理逻辑,从而提高代码的可维护性和一致性。
若依框架已经内置了基本的异常处理机制,主要依赖于GlobalExceptionHandler
类。该类使用了@ControllerAdvice
注解,用于捕获并处理全局范围内的异常。默认情况下,若依框架会处理一些常见的异常类型,例如:
BusinessException
:业务异常。UnauthorizedException
:未授权异常。ForbiddenException
:禁止访问异常。然而,在实际开发中,我们可能需要根据项目需求扩展或修改这些异常处理逻辑。
首先,我们需要定义一个自定义异常类,以便在业务逻辑中抛出特定的异常。以下是一个示例:
public class CustomException extends RuntimeException {
private Integer code; // 异常状态码
public CustomException(String message, Integer code) {
super(message);
this.code = code;
}
public Integer getCode() {
return code;
}
}
接下来,创建一个全局异常处理器类,继承若依框架的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("系统繁忙,请稍后再试!");
}
}
在业务逻辑中,我们可以根据条件抛出自定义异常。例如:
if (someCondition) {
throw new CustomException("这是一个自定义异常", 500);
}
在若依框架中,通常使用AjaxResult
作为返回值对象。因此,当后端捕获到异常时,可以通过AjaxResult.error()
方法返回错误信息。前端接收到该信息后,可以根据状态码和消息进行相应的提示。
以下是整个异常处理流程的Mermaid代码表示:
graph TD A[请求进入] --> B{是否发生异常} B -- 是 --> C[捕获异常] C --> D{是否为自定义异常} D -- 是 --> E[返回自定义错误信息] D -- 否 --> F[返回通用错误信息] B -- 否 --> G[正常返回数据]