做面食专业网站,建设网站有什么特点特色,企业网站搭建费用,有口碑的大连网站建设更多SpringBoot3内容请关注我的专栏#xff1a;《SpringBoot3》 重学SpringBoot3-ErrorMvcAutoConfiguration类 ErrorMvcAutoConfiguration类的作用工作原理定制 ErrorMvcAutoConfiguration示例代码1. 添加自定义错误页面2.自定义错误控制器3. ErrorAttributes定制错误信息 结…更多SpringBoot3内容请关注我的专栏《SpringBoot3》 重学SpringBoot3-ErrorMvcAutoConfiguration类 ErrorMvcAutoConfiguration类的作用工作原理定制 ErrorMvcAutoConfiguration示例代码1. 添加自定义错误页面2.自定义错误控制器3. ErrorAttributes定制错误信息 结论 ErrorMvcAutoConfiguration 类是 Spring Boot 中用于自动配置错误处理机制的一个关键组件。这篇文章将详细介绍 ErrorMvcAutoConfiguration类包括其作用、工作原理以及如何在 Spring Boot 3 应用中定制和使用它。
ErrorMvcAutoConfiguration类的作用 org.springframework.boot.autoconfigure.web.servlet.error.ErrorMvcAutoConfiguration 在 Spring Boot 应用中当应用遇到运行时异常或者请求映射到不存在的路径时ErrorMvcAutoConfiguration 类负责自动配置错误处理的相关机制。它确保应用能够以一种友好的方式向用户反馈错误信息而不是显示标准的错误堆栈信息或空白页。
ErrorMvcAutoConfiguration 提供了一个默认的错误处理页面并且允许开发者通过添加自定义的错误页面来覆盖默认设置提高应用的用户体验。
工作原理
ErrorMvcAutoConfiguration 利用 Spring MVC 的异常处理机制来捕捉应用中的各种错误并将错误信息映射到相应的错误处理控制器。默认情况下它会映射到 /error 路径。当错误发生时Spring MVC 会自动重定向到这个路径并由 BasicErrorController 处理请求最终返回一个错误视图。
开发者可以通过实现 ErrorViewResolver 接口来自定义错误页面的解析逻辑或者通过实现 ErrorController 接口并注册为 Bean 来完全控制错误处理的逻辑。 errorHtml 方法 这个方法用于处理 HTTP 请求并返回一个包含错误信息的 HTML 页面。它首先获取 HTTP 请求的状态码然后创建一个不可修改的 Map 对象用于存储错误信息。接着设置响应的状态码为请求的状态码然后调用 resolveErrorView 方法来解析错误视图。最后如果 resolveErrorView 方法返回了一个非空的 ModelAndView 对象那么就返回这个对象否则返回一个新的 ModelAndView 对象其中包含error作为视图名称和之前创建的错误信息模型。error 方法 这个方法用于处理 HTTP 请求并返回一个包含错误信息的 JSON 对象。它首先获取 HTTP 请求的状态码然后判断状态码是否为 NO_CONTENT如果是则直接返回一个包含状态码的 ResponseEntity 对象。接下来它创建一个包含错误信息的 Map 对象并将其与状态码一起封装在一个 ResponseEntity 对象中返回。 使用 resolveErrorView 解析错误的自定义视图地址解析过程 如果发生了500、404、503、403 这些错误 如果有模板引擎默认在 classpath:/templates/error/精确码.html如果没有模板引擎在静态资源文件夹下找 精确码.html 如果匹配不到 精确码.html这些精确的错误页就去找 5xx.html4xx.html模糊匹配 如果有模板引擎默认在 classpath:/templates/error/5xx.html如果没有模板引擎在静态资源文件夹下找 5xx.html new ModelAndView(error, model)如果解析不到错误页面的地址默认的错误页就是 error
定制 ErrorMvcAutoConfiguration
在Spring Boot 3中定制 ErrorMvcAutoConfiguration 的方式主要有以下几种
添加自定义错误页面在 src/main/resources/static/error 目录下添加自定义的错误页面如 404.html、500.html 等。Spring Boot 会自动识别这些页面并在相应的错误发生时使用它们。自定义错误控制器通过创建一个实现了 ErrorController 接口的Bean可以自定义错误处理逻辑。例如可以在这个控制器中添加日志记录或者根据不同的错误类型返回不同的视图或数据格式。使用 ErrorAttributesSpring Boot 提供了 ErrorAttributes 接口允许开发者在控制器或视图中访问错误相关的属性如状态码、错误消息等。这可以用来创建更丰富的错误信息反馈。
示例代码
1. 添加自定义错误页面
在Spring Boot应用中可以通过在 src/main/resources/static/error目录下添加错误页面来自定义错误响应。例如对于404错误页面未找到可以添加一个名为 404.html的页面。同样地对于500错误服务器内部错误可以添加一个名为 500.html的页面。Spring Boot会自动识别并在相应的错误发生时使用这些页面。
示例代码
假设你已经创建了 404.html和 500.html在 src/main/resources/static/error目录下无需其他配置Spring Boot会自动使用这些页面响应相应的错误。 2.自定义错误控制器
下面是一个简单的自定义错误控制器 ErrorController 的示例
package com.coderjia.springboot304web.controller;import jakarta.servlet.RequestDispatcher;
import jakarta.servlet.http.HttpServletRequest;
import org.springframework.boot.web.servlet.error.ErrorController;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;/*** author CoderJia* create 2024/03/12 9:09* Description**/
RestController
public class MyCustomErrorController implements ErrorController {RequestMapping(/error)public String handleError(HttpServletRequest request) {// 从请求中获取错误状态码Object status request.getAttribute(RequestDispatcher.ERROR_STATUS_CODE);if (status ! null) {int statusCode Integer.parseInt(status.toString());if (statusCode HttpStatus.NOT_FOUND.value()) {return Error 404: Page not found;} else if (statusCode HttpStatus.INTERNAL_SERVER_ERROR.value()) {return Error 500: Internal server error;}}return Error: unknown;}
} 通过这种方式开发者可以根据不同的错误类型提供不同的处理逻辑和反馈信息。
3. ErrorAttributes定制错误信息
Spring Boot 允许通过 ErrorAttributes 接口定制错误信息开发者可以使用这个接口来获取或修改错误详情。这些信息然后可以在自定义的错误控制器或错误视图中使用。
创建一个类来扩展 DefaultErrorAttributes 类可以添加或修改错误属性
package com.coderjia.springboot304web.config;import org.springframework.boot.web.error.ErrorAttributeOptions;
import org.springframework.boot.web.servlet.error.DefaultErrorAttributes;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.WebRequest;import java.util.Map;/*** author CoderJia* create 2024/03/12 9:13* Description**/
Component
public class CustomErrorAttributes extends DefaultErrorAttributes {Overridepublic MapString, Object getErrorAttributes(WebRequest webRequest, ErrorAttributeOptions options) {MapString, Object errorAttributes super.getErrorAttributes(webRequest, options);// 可以在此处添加自定义属性errorAttributes.put(customMessage, Something went wrong!);return errorAttributes;}
}在这个例子中我们添加了一个 customMessage 属性到错误响应中。这个属性可以在错误控制器或错误页面中使用从而提供更丰富的错误信息。 结论
ErrorMvcAutoConfiguration 类是 Spring Boot 中用于错误处理的重要组件它提供了一个简便的机制来自动配置错误处理逻辑同时也提供了多种方式供开发者根据需求定制错误处理。通过合理使用 ErrorMvcAutoConfiguration可以提高 Spring Boot 应用的健壮性和用户体验。