org.springframework.boot.web.reactive.error.ErrorWebExceptionHandler和org.springframework.web.server.WebExceptionHandler处理顺序
时间: 2023-07-23 12:56:15 浏览: 223
Spring Boot中Web应用的统一异常处理
在 Spring Boot 2.x 中,如果同时存在基于 Servlet 的 Web 应用程序和基于 Reactive 的 Web 应用程序,那么它们的异常处理顺序是不同的。
对于基于 Servlet 的 Web 应用程序,Spring Boot 2.x 会优先使用 `org.springframework.boot.web.servlet.error.ErrorAttributes` 和 `org.springframework.boot.web.servlet.error.ErrorController` 处理异常。如果没有找到对应的异常处理器,那么会使用 `org.springframework.boot.web.servlet.error.DefaultErrorAttributes` 和 `org.springframework.boot.web.servlet.error.BasicErrorController` 处理异常。
对于基于 Reactive 的 Web 应用程序,Spring Boot 2.x 会优先使用由 `org.springframework.boot.web.reactive.error.ErrorWebExceptionHandler` 接口实现类处理异常。如果没有找到对应的异常处理器,那么会使用由 `org.springframework.web.server.WebExceptionHandler` 接口实现类处理异常。
如果同时存在基于 Servlet 和基于 Reactive 的 Web 应用程序,那么它们的异常处理顺序如下:
1. 对于基于 Servlet 的 Web 应用程序,先使用 `org.springframework.boot.web.servlet.error.ErrorAttributes` 和 `org.springframework.boot.web.servlet.error.ErrorController` 处理异常,如果没有找到对应的异常处理器,再使用 `org.springframework.boot.web.servlet.error.DefaultErrorAttributes` 和 `org.springframework.boot.web.servlet.error.BasicErrorController` 处理异常。
2. 对于基于 Reactive 的 Web 应用程序,先使用由 `org.springframework.boot.web.reactive.error.ErrorWebExceptionHandler` 接口实现类处理异常,如果没有找到对应的异常处理器,再使用由 `org.springframework.web.server.WebExceptionHandler` 接口实现类处理异常。
总之,Spring Boot 2.x 在处理异常时,会优先使用基于 Servlet 的异常处理器,然后再使用基于 Reactive 的异常处理器。如果同时存在基于 Servlet 和基于 Reactive 的 Web 应用程序,就会优先使用基于 Servlet 的异常处理器来处理异常。
阅读全文