Spring boot 错误页面注册器和全局异常处理

Spring boot 错误页面注册器和全局异常处理,spring-boot,exception-handling,custom-error-pages,Spring Boot,Exception Handling,Custom Error Pages,我正在创建一个Spring Boot web应用程序,但我不明白为什么人们在存在更整洁、更明确的错误页面注册器的情况下使用全局异常处理程序(@ControllerAdvice)。请有人解释一下,是否可以从全局异常处理程序类(使用@ControllerAdvice注释的类,使用@Exceptionhandler方法)调用错误页面注册器。它实际上与全局异常处理程序相反;它正在捕获应用程序未处理的所有异常。注意,在Servlet环境中,它甚至将请求发送回/error路径上的容器中 你是对的,这个机制非

我正在创建一个Spring Boot web应用程序,但我不明白为什么人们在存在更整洁、更明确的错误页面注册器的情况下使用全局异常处理程序(@ControllerAdvice)。请有人解释一下,是否可以从全局异常处理程序类(使用@ControllerAdvice注释的类,使用@Exceptionhandler方法)调用错误页面注册器。

它实际上与全局异常处理程序相反;它正在捕获应用程序未处理的所有异常。注意,在Servlet环境中,它甚至将请求发送回
/error
路径上的容器中

你是对的,这个机制非常强大,你可以用它实现很多

您提到的其他异常处理机制是由SpringMVC本身提供的。它们在处理请求的过程中执行,不需要向容器进行额外的调度。在某些情况下,它们可能会受到更大的限制,因为它们提供的功能少于完整的
ErrorController
(MVC控制器)。 但与错误页面不同,您可以将这些页面配置为仅关注特定错误:

  • 您可以在控制器中声明
    @ExceptionHandler
    ,并指定要处理的异常类型
  • 您可以将
    @ControllerAdvice
    注释配置为仅适用于特定软件包、扩展特定接口的控制器或带有特定注释的控制器

我想说,当您希望在控制器级别处理业务异常时,后者非常有用。您可以使用错误页面来完成这一操作,但最终可能会使用一个错误控制器来处理太多的事情。

正如Brian所回答的,我认为您可以做到这一点。如果您还需要参考,我这里有一个样本来证明这一点: 在这个示例中,我使用类
GlobalExceptionHandler
中的
@ControllerAdvice
来管理
TestController
中的所有异常


希望这能有所帮助。

这非常有帮助……我仍在复习,但我的问题是,既然两者都有各自的用处,我能从GlobalExceptionHandler中调用ExceptionPageRegistrator吗?我认为这是可能的。您可以抛出任何异常,GlobalExceptionHandler只会得到该异常并处理消息、响应代码……等等。非常感谢。我的问题是,由于这两种方法各自都很有用,我可以从GlobalExceptionHandler调用ExceptionPageRegistrator吗