异常

如果在请求映射期间发生异常或从请求处理程序(例如 @Controller)抛出异常,DispatcherHandler 会委托给 HandlerExceptionHandler bean 链来解决异常并提供替代处理,通常是错误响应。

下表列出了可用的 HandlerExceptionHandler 实现:

Table 1. HandlerExceptionHandler 实现
HandlerExceptionHandler 描述

SimpleMappingExceptionHandler

异常类名和错误视图名之间的映射。用于在浏览器应用程序中渲染错误页面。

SimpleHandlerExceptionHandler

解析 Web MVC 引发的异常并将它们映射到 HTTP 状态代码。 另请参见替代方案 ResponseEntityExceptionHandler错误响应

ResponseStatusExceptionHandler

解析带有 @ResponseStatus 注解的异常,并根据注解中的值将它们映射到 HTTP 状态代码。

ExceptionHandlerAnnotationExceptionHandler

通过调用 @Controller@ControllerAdvice 类中的 @ExceptionHandler 方法来解析异常。 参见 @ExceptionHandler 方法

解析器链

您可以通过在 Infra 配置中声明多个 HandlerExceptionHandler bean 并根据需要设置它们的 order 属性来形成异常解析器链。order 属性越高,异常解析器的位置越靠后。

HandlerExceptionHandler 的契约指定它可以返回:

  • 指向错误视图的 ModelAndView

  • 如果异常在解析器内处理,则为空 ModelAndView

  • 如果异常仍未解决,则为 null,以便后续解析器尝试,如果异常在最后仍存在,则允许其冒泡到 Servlet 容器。

MVC 配置 会自动声明用于默认 Web MVC 异常、 @ResponseStatus 注解异常以及支持 @ExceptionHandler 方法的内置解析器。您可以自定义该列表或替换它。