全部学科
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拦截器
想查看更多题目和详细解析?
小程序提供完整的题库、模拟考试和详细解析
马上就来

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

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