全部学科
Python全栈
python
NodeJS全栈
nodejs
📅 2026-05-18 8 分钟 ✍️ juanwangdev

Spring MVC HandlerExceptionResolver异常解析器

HandlerExceptionResolver 负责解析控制器执行过程中抛出的异常,将其转换为 ModelAndView 或响应内容。

接口定义

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

内置实现类

实现类功能
ExceptionHandlerExceptionResolver处理 @ExceptionHandler 方法
DefaultHandlerExceptionResolver处理 Spring 标准异常
ResponseStatusExceptionResolver处理 @ResponseStatus 注解异常

自定义异常解析器

Java
@Component
public class CustomExceptionResolver implements HandlerExceptionResolver {

    @Override
    public ModelAndView resolveException(HttpServletRequest request,
                                          HttpServletResponse response,
                                          Object handler,
                                          Exception ex) {
        ModelAndView mav = new ModelAndView();

        if (ex instanceof BusinessException) {
            mav.setViewName("error/business");
            mav.addObject("code", ((BusinessException) ex).getCode());
            mav.addObject("message", ex.getMessage());
        } else {
            mav.setViewName("error/500");
            mav.addObject("message", "系统异常");
        }

        return mav;
    }
}

注册与优先级

Java
@Configuration
public class WebConfig implements WebMvcConfigurer {

    @Override
    public void configureHandlerExceptionResolvers(List<HandlerExceptionResolver> resolvers) {
        resolvers.add(0, new CustomExceptionResolver());
    }
}

自定义解析器默认会覆盖内置解析器,使用 extendHandlerExceptionResolvers 可追加。

与 @ExceptionHandler 配合

Java
@RestControllerAdvice
public class GlobalExceptionHandler {

    @ExceptionHandler(BusinessException.class)
    public Result<String> handleBusinessException(BusinessException ex) {
        return Result.fail(ex.getCode(), ex.getMessage());
    }
}

要点总结

  • resolveException 返回 ModelAndView,返回 null 表示无法处理
  • 多个解析器按顺序执行,直到有返回结果
  • @ExceptionHandler 注解方式更推荐使用
  • 可返回 JSON 错误响应替代错误页面
想在手机上练习这篇文章的配套题目?
使用微信卷王开发者小程序,打开首页顶部扫码功能识别二维码
← 上一篇 Spring MVC HandlerInterceptor拦截器
下一篇 → Spring MVC 自定义MessageConverter消息转换器
扫码体验小程序
加载中
想在手机上刷题学习?
使用微信卷王开发者小程序,打开首页顶部扫码功能识别二维码