Exceptions

@Controller@ControllerAdvice 类可以有 @ExceptionHandler 方法来处理来自控制器方法的异常。下面的示例包含这样一个处理程序方法: include-code::./SimpleController[indent=0] 异常可以与正在传播的顶级异常(即直接抛出的 IOException)匹配,或与顶级包装异常(例如,包含在 IllegalStateException 中的 IOException)内的直接原因匹配。 对于匹配异常类型,最好将目标异常声明为方法参数,如前一示例中所示。或者,该注解声明可缩小异常类型以匹配。我们通常建议在参数签名中尽可能具体并按顺序声明您的主要根异常映射。有关详细信息,请参见 @ControllerAdvice

WebFlux 中的 @ExceptionHandler 方法支持与 @RequestMapping 方法相同的方法参数和返回值,但请求正文和 @ModelAttribute 相关的参数除外。

Spring WebFlux 中的 @ExceptionHandler 方法的支持由 @RequestMapping 方法的 HandlerAdapter 提供。有关更多详细信息,请参见 DispatcherHandler

Media Type Mapping

除了异常类型之外,@ExceptionHandler 方法还可以声明可生产的媒体类型。这允许根据 HTTP 客户端请求的媒体类型(通常在“Accept”HTTP 请求头中)来优化错误响应。

应用程序可以直接在注释中为同一异常类型声明可生产的媒体类型: