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

问题描述:

我正在创建一个Spring Boot Web应用程序,但我很困惑为什么人们在错误页面注册器更干净和更明确时使用全局异常处理程序(@ControllerAdvice)。请有人可以解释更多,是否有可能从全局异常处理程序类(@ControllerAdvice注释类,使用@Exceptionhandler方法)调用错误页面注册器。错误页面注册器和全局异常处理

由于布莱恩答案,我认为你可以做到这一点。如果您仍然需要参考:https://github.com/kennytai/SampleSpringbootExceptionHandler 在此示例中,我使用类GlobalExceptionHandler中的@ControllerAdvice来管理来自TestController的所有异常。

希望得到这个帮助。

+0

调用一个ExceptionPageRegistrar,这对我很有帮助...我仍然在重复它,但是我的问题是因为两者都以他们自己的方式有用,我可以吗从GlobalExceptionHandler调用ExceptionPageRegistrar –

+0

我认为这是可能的。你可以抛出任何异常和GlobalExceptionHandler只是得到一个,并处理消息,响应代码...等。 –

它实际上是error pages mechanism in Spring Boot是全球之一;它捕获应用程序未处理的所有异常。请注意,在Servlet环境中,它甚至会将请求分发回/error路径中的容器。

你说得对,这种机制非常强大,你可以用它做很多。

您提到的其他异常处理机制是由Spring MVC本身提供的。它们在处理请求期间执行,不需要额外向容器发送。在某些情况下,它们可能会受到更多限制,因为它们的功能比完整的ErrorController(这是一个MVC控制器)少。 但与错误页面,则可以配置那些只专注于特定的错误:

  • 可以声明一个控制器内的@ExceptionHandler并指定异常的类型你想处理
  • 您可以配置@ControllerAdvice注释仅适用于特定的软件包,控制器延伸的专用接口或与特定注释

我说,当你要处理的控制器级业务异常后者是相当有用的注解。你可以通过错误页面来做到这一点,但是最终你可能会得到一个处理太多事情的错误控制器。

+0

非常感谢。我的问题是,既然这两种方法都有用,我可以从GlobalExceptionHandler –