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日

相关文章

  • SpringBoot整合SpringDataRedis的示例代码

    针对SpringBoot整合SpringDataRedis的示例代码,我来进行详细讲解。以下是完整攻略: 1. 引入依赖 在 pom.xml 文件中引入 Spring Data Redis 的依赖: <dependency> <groupId>org.springframework.boot</groupId> <a…

    Java 2023年5月20日
    00
  • vue cli3.0结合echarts3.0与地图的使用方法示例

    下面是关于“vue cli 3.0结合echarts 3.0与地图的使用方法示例”的完整攻略。 步骤一:创建基于vue-cli3.0的工程 Vue CLI是一个基于vue.js的全新工具,用于快速构建vue.js项目,它提供了:node命令行交互工具、快速原型开发、自动代码规范检测、构建和部署功能等。 详细步骤: 确保你已经安装了Node.js,命令行输入n…

    Java 2023年6月15日
    00
  • servlet+JSP+mysql实现文件上传的方法

    实现文件上传功能需要前端页面、服务端servlet程序以及后台mysql数据库的支持。下面是使用servlet+JSP+mysql实现文件上传的完整攻略。 前端页面 首先,我们需要在前端页面上添加文件上传的表单,通过提交表单将文件传输到服务端。此处提供一段基本的表单代码: <form method="post" enctype=&q…

    Java 2023年6月15日
    00
  • java高级用法之JNA中的Function

    Java高级用法之JNA中的Function JNA是一种Java的native code 远程调用框架,通过JNA我们可以轻松调用系统DLL或者动态库,在Java中轻松访问系统底层资源。 Function是JNA的一个重要类,它可以封装C/C++中的函数,并在Java中直接调用。本攻略将详细介绍JNA中的Function,并给出两个示例说明。 1、Func…

    Java 2023年5月26日
    00
  • 关于MybatisPlus配置双数据库驱动连接数据库问题

    MybatisPlus是Mybatis的扩展库,它提供了更多的便捷操作和增强功能,是目前比较流行的Java持久层框架之一。在使用MybatisPlus框架时,我们可能需要连接多个不同的数据库,这时就会遇到双数据库驱动连接数据库的问题。下面是一份详细的攻略: 1.添加双数据库的配置文件 首先,我们需要添加MybatisPlus的配置文件,具体名字根据项目需要来…

    Java 2023年6月16日
    00
  • Java基础之Stream流原理与用法详解

    Java基础之Stream流原理与用法详解 1. 什么是Stream流? Stream流是Java 8中引入的一种新的API,它允许我们在集合上进行的函数式操作。它使我们能够以声明式方式处理集合中的元素,而不是直接以循环形式迭代它们。在Java 8之前,Collections类提供了大量用于操作集合的方法。但是,为了使用这些方法,你必须在代码中写出来循环,这…

    Java 2023年5月27日
    00
  • java开发之MD5加密算法的实现

    Java开发之MD5加密算法的实现 简介 MD5是一种常用的加密算法,Java中可以通过MessageDigest类实现MD5加密。本攻略将介绍如何在Java中使用MessageDigest类实现MD5加密。 实现过程 1. 获取MessageDigest对象 使用MessageDigest类的getInstance方法获取MessageDigest对象,并…

    Java 2023年5月19日
    00
  • IDEA快速搭建jsp项目的图文教程

    下面我将为你详细讲解如何通过IDEA快速搭建jsp项目的完整攻略,其中包括了图文教程和示例说明。 第 1 步:创建项目 打开 IntelliJ IDEA 软件; 点击菜单栏“File”-“New”-“Project”; 在弹出的对话框中,选择“Java Enterprise”-“Web Application”; 在下一步中,选择创建项目的位置,填写项目的名…

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