spring mvc配置handlerexceptionresolver主要有xml和java两种方式:xml通过标签注册实现类,默认优先级最低;java配置需实现webmvcconfigurer并重写configurehandlerexceptionresolvers方法;可通过ordered接口或继承abstracthandlerexceptionresolver控制顺序;此外还可使用@controlleradvice与@exceptionhandler实现更灵活的全局异常处理。

Spring MVC 中配置 HandlerExceptionResolver 主要有两种方式:XML 配置和 Java 配置,核心都是让 Spring 容器识别并注册你自定义的异常处理器类。
XML 方式注册自定义解析器
适用于传统 XML 配置项目(如 springmvc.xml):
- 编写一个实现
HandlerExceptionResolver接口的类,比如GlobalExceptionResolver - 在
springmvc.xml中用<bean></bean>标签注册该类
示例配置:
Spring 会自动将其加入异常处理链。注意:未指定 order 时,默认排在所有内置解析器之后(即优先级最低)。
Java 配置方式(推荐)
适用于基于 JavaConfig 的 Spring Boot 或纯 Spring MVC 项目:
- 实现
WebMvcConfigurer接口 - 重写
configureHandlerExceptionResolvers方法 - 向入参
List<handlerexceptionresolver></handlerexceptionresolver>添加你的解析器实例
示例代码:
public class WebConfig implements WebMvcConfigurer {@Override
public void configureHandlerExceptionResolvers(List
resolvers.add(new GlobalExceptionResolver());
}
}
控制解析器执行顺序
多个解析器共存时,顺序决定谁先处理异常:
- 实现
Ordered接口,重写getOrder()方法返回整数 - 数值越小,优先级越高(如返回
-1会比默认的Integer.MAX_VALUE更早执行) - 也可继承
AbstractHandlerExceptionResolver,它已自带order属性支持
配合 @ControllerAdvice 和 @ExceptionHandler(补充方案)
这不是 HandlerExceptionResolver 的直接配置,但属于 Spring MVC 更常用、更灵活的全局异常处理方式:
- 用
@ControllerAdvice注解一个类,使其作用于所有控制器 - 在其中定义多个
@ExceptionHandler方法,按异常类型分别处理 - Spring 内置的
ExceptionHandlerExceptionResolver会自动识别并启用它们
这种方式无需手动注册解析器,也更容易做细粒度响应(如区分 JSON API 和 HTML 页面返回)。











