全部学科
Python全栈
python
NodeJS全栈
nodejs
小程序首页
📅 2026-05-18 6 分钟 ✍️ juanwangdev

Spring Boot 全局异常处理原理

Spring Boot通过DispatcherServlet的异常处理机制实现全局异常捕获,底层依赖HandlerExceptionResolver接口。

核心架构

异常处理流程

Java
请求 -> Controller -> 抛出异常 -> DispatcherServlet -> HandlerExceptionResolver链 -> 异常处理

DispatcherServlet捕获Controller层抛出的异常,依次调用已注册的HandlerExceptionResolver进行处理。

HandlerExceptionResolver接口

Java
public interface HandlerExceptionResolver {
    ModelAndView resolveException(HttpServletRequest request,
                                   HttpServletResponse response,
                                   Object handler,
                                   Exception ex);
}

内置Resolver

Resolver作用
ExceptionHandlerExceptionResolver处理@ExceptionHandler标注的方法
DefaultHandlerExceptionResolver处理Spring标准异常
ResponseStatusExceptionResolver处理@ResponseStatus注解异常
SimpleMappingExceptionResolver配置式异常映射(传统方式)

@ControllerAdvice注册原理

text
@ControllerAdvice
public class GlobalExceptionHandler {
    @ExceptionHandler(Exception.class)
    public ResponseEntity<String> handle(Exception e) {
        return ResponseEntity.status(500).body(e.getMessage());
    }
}

Spring启动时扫描@ControllerAdvice注解类,通过ControllerAdviceBean封装并注册到ExceptionHandlerExceptionResolver中。

ExceptionHandlerExceptionResolver在启动时解析所有@ExceptionHandler方法,建立异常类型到处理方法的映射表。

执行流程

  1. Controller方法执行抛出异常
  2. DispatcherServlet捕获异常
  3. 遍历HandlerExceptionResolver链
  4. ExceptionHandlerExceptionResolver匹配@ExceptionHandler方法
  5. 反射调用处理方法,返回响应

要点总结

  • DispatcherServlet统一捕获Controller层异常
  • HandlerExceptionResolver链式处理机制
  • @ControllerAdvice通过ExceptionHandlerExceptionResolver注册
  • 异常类型匹配采用最近父类原则

📝 发现内容有误?点击此处直接编辑

← 上一篇 Spring Boot @ControllerAdvice与@ExceptionHandler
下一篇 → Spring Boot 异常处理优先级
想查看更多题目和详细解析?
小程序提供完整的题库、模拟考试和详细解析
马上就来

长按或扫描二维码,立即体验

扫码体验小程序
马上就来
使用微信扫描二维码
立即体验完整题库