import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import lombok.extern.slf4j.Slf4j;
// 日志注解,替代printStackTrace
@Slf4j
// 标识全局异常处理器(针对RestController)
@RestControllerAdvice
public class GlobalExceptionHandler {
/**
* 捕获所有Exception类型的异常(兜底处理)
* @param ex 捕获到的异常对象
* @return 统一的错误响应Result
*/
@ExceptionHandler(Exception.class)
public Result handleGlobalException(Exception ex) {
// 用日志记录异常(比printStackTrace更规范,便于线上排查)
log.error("全局异常捕获: ", ex);
// 返回友好提示 + 统一响应结构
return Result.error("操作失败,请联系管理员");
}
}
-
@RestControllerAdvice注解- 核心作用:标识当前类是 全局异常处理类,且专门针对 Spring 中的
@RestController(接口层)生效 - 底层逻辑:
@RestControllerAdvice = @ControllerAdvice(全局切面,可捕获所有控制器的异常)+ @ResponseBody - 实际用途:让异常处理逻辑与业务代码解耦,不用在每个接口里写 try-catch,统一管理所有接口的异常响应
- 核心作用:标识当前类是 全局异常处理类,且专门针对 Spring 中的
-
@Slf4j注解(Lombok 提供)- 核心作用:自动生成
org.slf4j.Logger日志对象(变量名默认log),无需手动写private static final Logger log = LoggerFactory.getLogger(xxx.class) - 依赖前提:项目需引入 Lombok 依赖(通常 Spring Boot 项目会默认集成或手动添加)
- 实际用途:替代
System.out.println或ex.printStackTrace(),规范输出异常日志(支持输出到文件、按级别过滤等)
- 核心作用:自动生成
-
@ExceptionHandler(Exception.class)注解- 核心作用:指定当前方法专门处理 Exception 类型及其子类的异常(即 “兜底异常处理”,所有未被单独捕获的异常都会走到这里)
- 参数说明:注解内的
Exception.class是 “异常捕获范围”,若改为NullPointerException.class则只处理空指针异常 - 方法参数:
Exception ex是捕获到的异常实例,包含异常信息、栈轨迹等,用于日志打印或排查问题
-
Result.error(...)方法调用- 核心作用:返回 统一格式的错误响应(
Result是自定义通用响应类) - 响应结构:通常包含
code(错误码,如 500)、msg(错误提示)、data(空值或错误详情),前端可按固定格式解析 - 实际用途:避免异常直接抛给前端导致的 “白屏” 或 “杂乱错误信息”,给用户友好提示,同时让前端统一处理错误逻辑
- 核心作用:返回 统一格式的错误响应(