更多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.html,4xx.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,可以自定义错误处理逻辑。例如,可以在这个控制器中添加日志记录,或者根据不同的错误类型返回不同的视图或数据格式。使用 ErrorAttributes:Spring 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 {

@Override

public Map getErrorAttributes(WebRequest webRequest, ErrorAttributeOptions options) {

Map errorAttributes = super.getErrorAttributes(webRequest, options);

// 可以在此处添加自定义属性

errorAttributes.put("customMessage", "Something went wrong!");

return errorAttributes;

}

}

在这个例子中,我们添加了一个 customMessage 属性到错误响应中。这个属性可以在错误控制器或错误页面中使用,从而提供更丰富的错误信息。

结论

ErrorMvcAutoConfiguration 类是 Spring Boot 中用于错误处理的重要组件,它提供了一个简便的机制来自动配置错误处理逻辑,同时也提供了多种方式供开发者根据需求定制错误处理。通过合理使用 ErrorMvcAutoConfiguration,可以提高 Spring Boot 应用的健壮性和用户体验。

好文推荐

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。