SpringBoot异常错误页面实现方法介绍

让我来详细讲解“SpringBoot异常错误页面实现方法介绍”的完整攻略。

1. 实现方式介绍

SpringBoot提供了两种方式来实现异常错误页面:

1.1 自定义ErrorController

通过自定义ErrorController的方式,我们可以根据异常类型,异常状态码或者URL地址来进行异常信息的处理和跳转。这个方法需要手动实现异常信息的处理和跳转,处理方式可以是页面跳转或者返回JSON等形式。

@Controller
@RequestMapping("${server.error.path:${error.path:/error}}")
public class CustomErrorController implements ErrorController {

    private final ErrorAttributes errorAttributes;

    @Autowired
    public CustomErrorController(ErrorAttributes errorAttributes) {
        this.errorAttributes = errorAttributes;
    }

    @RequestMapping(produces = MediaType.TEXT_HTML_VALUE)
    public ModelAndView errorHtml(HttpServletRequest request, Model model) {
        HttpStatus status = getStatus(request);
        Map<String, Object> errorMap = getErrorAttributes(request, isIncludeStackTrace(request, MediaType.TEXT_HTML));
        model.addAttribute("errorCode", status.value());
        model.addAttribute("errorMsg", errorMap.get("message"));
        return new ModelAndView("error");
    }

    @RequestMapping
    public ResponseEntity<Map<String, Object>> error(HttpServletRequest request) {
        HttpStatus status = getStatus(request);
        Map<String, Object> errorMap = getErrorAttributes(request, isIncludeStackTrace(request, MediaType.ALL));
        return ResponseEntity.status(status).body(errorMap);
    }

    @Override
    public String getErrorPath() {
        return "/error";
    }

    private Map<String, Object> getErrorAttributes(HttpServletRequest request,
                                                   boolean includeStackTrace) {
        RequestAttributes requestAttributes = new ServletRequestAttributes(request);
        return this.errorAttributes.getErrorAttributes(requestAttributes, includeStackTrace);
    }

    private boolean isIncludeStackTrace(HttpServletRequest request,
                                         MediaType produces) {
        return true;
    }

    private HttpStatus getStatus(HttpServletRequest request) {
        Integer statusCode = (Integer) request.getAttribute("javax.servlet.error.status_code");
        if (statusCode != null) {
            try {
                return HttpStatus.valueOf(statusCode);
            }
            catch (Exception ex) {
                ex.printStackTrace();
            }
        }
        return HttpStatus.INTERNAL_SERVER_ERROR;
    }
}

这里我们通过自定义Controller的方式实现了异常信息的处理和跳转。当发生异常时,会跳转到我们定义的error页面,并将错误信息传递给模板引擎进行渲染。

1.2 集成ErrorPageRegistrar接口

除了自定义ErrorController,我们还可以通过实现ErrorPageRegistrar接口的方式来定制化我们的异常处理页面。这个方法需要在SpringBoot启动时手动初始化,并设置需要处理的异常状态码和跳转的页面地址。

@Configuration
public class WebConfig implements ErrorPageRegistrar {

    @Override
    public void registerErrorPages(ErrorPageRegistry errorPageRegistry) {
        errorPageRegistry.addErrorPages(new ErrorPage(HttpStatus.NOT_FOUND, "/404.html"));
        errorPageRegistry.addErrorPages(new ErrorPage(HttpStatus.INTERNAL_SERVER_ERROR, "/500.html"));
        errorPageRegistry.addErrorPages(new ErrorPage("/error.html"));
    }

}

这里我们通过实现ErrorPageRegistrar接口的方式,注册了三个异常页面,分别是404.html500.htmlerror.html。分别对应了NOT_FOUNDINTERNAL_SERVER_ERROR以及其他未处理的异常。

2. 示例说明

2.1 示例1:自定义错误页面

@RequestMapping("/test")
public String test() {
    throw new RuntimeException("发生异常了...");
}

在上面代码中,我们定义了一个/test的请求,当访问此请求时,抛出一个RuntimeException异常,并将异常信息传递给自定义的error页面进行渲染。

error.html

<html>
<head>
    <title>自定义异常错误处理页面</title>
</head>
<body>
    <h2>出错了!!!</h2>
    <p>错误码:${errorCode}</p>
    <p>错误信息:${errorMsg}</p>
</body>
</html>

当访问/test时,我们会跳转到自定义的error页面,页面会显示异常状态码和异常信息。

2.2 示例2:集成错误页面

在本示例中,我们使用ErrorPageRegistrar接口方式来实现集成错误页面。当用户访问不存在的地址或者发生服务器错误时,将跳转到相应的错误页面。

application.properties

server.error.whitelabel.enabled=false

这里我们需要在application.properties中禁用SpringBoot默认的错误页面,以免和我们自定义的页面冲突。

WebConfig.java

@Configuration
public class WebConfig implements ErrorPageRegistrar {

    @Override
    public void registerErrorPages(ErrorPageRegistry errorPageRegistry) {
        errorPageRegistry.addErrorPages(new ErrorPage(HttpStatus.NOT_FOUND, "/404.html"));
        errorPageRegistry.addErrorPages(new ErrorPage(HttpStatus.INTERNAL_SERVER_ERROR, "/500.html"));
        errorPageRegistry.addErrorPages(new ErrorPage("/error.html"));
    }

}

在我们定义的WebConfig中,我们通过实现ErrorPageRegistrar接口来注册我们的异常处理页面。当访问不存在的地址时,将跳转到404.html页面;当服务器发生错误时,将跳转到500.html页面;其他未处理的异常将跳转到error.html页面。

这样,我们就实现了SpringBoot的错误页面处理功能。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:SpringBoot异常错误页面实现方法介绍 - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • 如何自己动手写SQL执行引擎

    如何自己动手写SQL执行引擎 要自己动手写一个SQL执行引擎,需要掌握以下几个步骤: 设计关系型数据库 构建SQL解析器 构建执行计划 执行查询语句 下面逐个步骤进行详细讲解: 设计关系型数据库 在设计关系型数据库时,需要考虑以下几个方面: 数据表设计:每个表需要设计对应的字段、数据类型、主键等信息。 索引设计:需要根据查询需求设计合适的索引,提高查询效率。…

    Java 2023年6月16日
    00
  • Java创建删除文件和目录的方法(推荐)

    下面是详细的攻略: Java创建删除文件和目录的方法(推荐) 1. 创建文件 在Java中,我们可以使用File类来创建文件。下面是创建文件的步骤: 首先,我们需要创建一个File对象,指向要创建的文件。可以使用文件路径或文件名来创建File对象。 然后,使用createNewFile()方法创建文件。 代码示例: import java.io.*; pub…

    Java 2023年5月19日
    00
  • Struts2的输入校验实例代码

    下面我将为您详细讲解“Struts2的输入校验实例代码”的完整攻略。 简介 在Web开发中,输入校验是非常重要的一部分,能够有效地防止非法输入,保证系统安全性和稳定性。Struts2框架提供了丰富的输入校验机制,开发者可以根据业务需求灵活使用。 添加依赖 要在 Struts2 中使用输入校验,需要添加相关依赖包。在 Maven 项目中,可以通过在 pom.x…

    Java 2023年6月15日
    00
  • Java类加载器的作用是什么?

    Java类加载器的作用是将类文件加载到内存中,并使其能够被Java虚拟机识别。在Java中,类的加载是在其被首次引用时完成的,而类加载器则是负责协调和完成这个任务的组件。 Java类加载器的主要作用包括: 将.class文件加载到JVM中 确定每个类在JVM中的唯一性 保证不同类的可见性 实现类的动态加载和卸载 实现Java程序的模块化开发 Java类加载器…

    Java 2023年5月11日
    00
  • SpringBoot依赖注入的三种方式

    下面是关于Spring Boot依赖注入的三种方式的详细讲解: 1. 构造器注入 构造器注入是为Bean的属性提供值的一种方式。当容器实例化Bean时,Spring容器会将与Bean依赖关系具有兼容性的Bean传递给它的构造器,并初始化Bean的属性。 这种方式适用于具有重要和必需依赖关系的Bean,并且确保了Bean初始化后的完整性。 下面是一个示例: @…

    Java 2023年5月15日
    00
  • Myeclipse怎么更改默认的class模板?

    更改MyEclipse默认的class模板需要经过以下几个步骤: 打开MyEclipse,在顶部菜单栏点击“Window -> Preferences”,打开MyEclipse的偏好设置。 在弹出的“Preferences”对话框中,找到“Java -> Code Style -> Code Templates”选项。点击它,可以看到MyE…

    Java 2023年6月15日
    00
  • 详解Java的Hibernate框架中的缓存与原生SQL语句的使用

    详解Java的Hibernate框架中的缓存与原生SQL语句的使用攻略 缓存介绍 在Hibernate中,缓存是指将对数据库的请求结果存放在内存中,以便下一次请求同一数据时可以直接从缓存中获取而不需要再次访问数据库。Hibernate框架中的缓存主要分为两种: 一级缓存:是Session级别的缓存,也称为Session缓存。在同一个Session里,重复查询…

    Java 2023年5月19日
    00
  • 利用Spring boot如何创建简单的web交互应用

    使用Spring Boot创建简单的Web交互应用的完整攻略如下: 创建Spring Boot项目 首先,我们需要创建一个Spring Boot项目。可以使用Spring Initializr来创建一个新的Spring Boot项目。以下是创建Spring Boot项目的步骤: 打开Spring Initializr网站,选择项目的类型和语言,然后点击Gen…

    Java 2023年5月15日
    00
合作推广
合作推广
分享本页
返回顶部