53、错误处理-【源码分析】底层组件功能分析
53、错误处理-【源码分析】底层组件功能分析
#### 默认错误处理机制
- **自动配置类**:`ErrorMvcAutoConfiguration`负责自动配置Spring Boot的错误处理规则。
- **默认错误映射**:提供`/error`映射处理所有错误请求。
#### 关键组件
1. **`DefaultErrorAttributes`**
- **类型**:`ErrorAttributes`、`HandlerExceptionResolver`
- **作用**:定义错误页面中包含的数据,如异常明细、堆栈信息等。
2. **`BasicErrorController`**
- **类型**:`Controller`
- **作用**:处理默认`/error`路径的请求。
- **响应方式**:
- **JSON响应**:对于机器客户端,返回包含错误信息的JSON数据。
- **HTML响应**:对于浏览器客户端,呈现一个名为`error`的视图。
3. **`DefaultErrorViewResolver`**
- **类型**:视图解析器
- **作用**:根据HTTP状态码解析错误视图页面。
- **页面查找规则**:
- 在`/templates/error`目录下查找与状态码对应的页面,如`404.html`、`5xx.html`。
- 如果找不到精确匹配的页面,则查找通用的`4xx.html`或`5xx.html`。
- 如果仍未找到,则显示默认的白页。
#### 异常处理流程
1. **异常发生**:在应用程序中抛出异常。
2. **异常捕获**:
- 由`DispatcherServlet`捕获异常。
- 调用`HandlerExceptionResolver`链尝试处理异常。
3. **数据准备**:
- `DefaultErrorAttributes`将异常信息保存到请求域中。
4. **视图解析**:
- `BasicErrorController`处理`/error`请求,返回`ModelAndView`对象,视图名为`error`。
- `DefaultErrorViewResolver`根据HTTP状态码查找并解析对应的错误页面。
5. **页面渲染**:
- 模板引擎渲染错误页面,显示异常信息。
#### 自定义错误处理
- **自定义错误页面**:在`/templates/error`目录下创建特定状态码的HTML页面。
- **实现`ErrorController`**:完全替换默认错误处理行为。
- **添加`ErrorAttributes`组件**:自定义错误页面中包含的数据。
- **使用`@ControllerAdvice`和`@ExceptionHandler`**:处理全局异常。
通过以上组件和流程,Spring Boot实现了灵活且可定制的错误处理机制,方便开发者根据需求进行个性化配置。