全部学科
NodeJS全栈
nodejs
Python全栈
python
📅 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注册
  • 异常类型匹配采用最近父类原则
想在手机上练习这篇文章的配套题目?
使用微信卷王开发者小程序,打开首页顶部扫码功能识别二维码
← 上一篇 SpringBoot命令行运行JAR
下一篇 → Spring Boot @ControllerAdvice与@ExceptionHandler
扫码体验小程序
加载中
想在手机上刷题学习?
使用微信卷王开发者小程序,打开首页顶部扫码功能识别二维码