SpringBoot自定义/error路径失效的解决

下面是对于“SpringBoot自定义/error路径失效的解决”的完整攻略:

背景

在使用SpringBoot开发web应用的过程中,我们有时需要自定义error处理页面。按照惯例,我们可以将静态页面放在/resources/static/error路径下,然后在Controller层中自定义处理对应的erroCode,比如404、500等。这样,当用户访问出错时,SpringBoot便会自动跳转到对应的错误页面。

问题

但是,有时我们会发现自定义/error路径失效,比如在访问不存在的URL时,默认跳转到SpringBoot自带的错误提示页面,而不是我们自定义的页面。那么,我们该如何解决这个问题呢?下面给出两种解决方法。

方法一:自定义ErrorController

在SpringBoot中,如果我们需要自定义error处理的显示界面,我们可以通过自定义一个ErrorController来实现,这也是SpringBoot官方推荐的方式。

具体步骤如下:

  1. 创建一个类,继承org.springframework.boot.web.servlet.error.ErrorController,如下所示:

```
@Controller
public class MyErrorController implements ErrorController {
private final static String ERROR_PATH = "/error";

   @RequestMapping(ERROR_PATH)
   public String handleError(HttpServletRequest request, ModelMap modelMap) {
       // 这里处理自定义的error错误页面,比如获取statusCode、Exception等信息,进行处理
       return "/error/404.html";
   }

   @Override
   public String getErrorPath() {
       return ERROR_PATH;
   }

}
```

在该类中,我们定义了一个handleError方法,用于自定义处理错误请求。需要注意的是,这里的返回值是一个视图名称,对应着/resources/static/error下的页面路径。

  1. 配置错误页路径,如下所示:

@Configuration
public class WebConfig extends WebMvcConfigurerAdapter {
@Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController("/404").setViewName("/error/404.html");
}
}

在上述代码中,我们将/404请求映射到/resources/static/error/404.html页面。

自定义完Error Controller后,我们便可以通过访问http://localhost:8080/errorhttp://localhost:8080/404等来实现自定义错误提示页面的展示了。

方法二:使用ErrorPageRegistrar

除了自定义ErrorController之外,我们还可以通过使用ErrorPageRegistrar来实现自定义错误处理页面的功能,具体步骤如下:

  1. 创建一个类,实现ErrorPageRegistrar接口,如下所示:

@Configuration
public class MyErrorPageRegistrar implements ErrorPageRegistrar {
@Override
public void registerErrorPages(ErrorPageRegistry registry) {
registry.addErrorPages(new ErrorPage(HttpStatus.NOT_FOUND, "/404"));
registry.addErrorPages(new ErrorPage(HttpStatus.INTERNAL_SERVER_ERROR, "/500"));
}
}

在该类中,我们通过ErrorPageRegistry.addErrorPages(ErrorPage ... var1)方法,向SpringBoot注册了两个错误页。

  1. 配置404错误页路径,如下所示:

@Controller
public class MyErrorController {
@RequestMapping("/404")
public String handleError(HttpServletRequest request, HttpServletResponse response) {
// 这里处理自定义的404错误页面,比如获取Referer等信息,进行处理
return "/error/404.html";
}
}

和方法一相比,方法二方式的主要区别就是使用了ErrorPageRegistrar来注册错误页,而不是自定义的ErrorController

需要注意的是,以上方法二需要在应用启动时先加载一下MyErrorPageRegistrar类:

@SpringBootApplication
@Import(MyErrorPageRegistrar.class)
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

示例

为了更加直观地说明以上两种方法的使用,下面给出两条完整的示例说明:

示例一:自定义ErrorController

  1. /resource/static/error下新建一个文件404.html,内容如下所示:

```




404 Not Found

404 Not Found

Sorry, the page you are looking for is not found.


```

  1. 在SpringBoot应用中新建一个类MyErrorController,继承org.springframework.boot.web.servlet.error.ErrorController,并重新实现getErrorPathhandleError方法,如下所示:

```
@Controller
public class MyErrorController implements ErrorController {
private final static String ERROR_PATH = "/error";

   @RequestMapping(ERROR_PATH)
   public String handleError(HttpServletRequest request, ModelMap modelMap) {
       int statusCode = (int) request.getAttribute("javax.servlet.error.status_code");
       Exception exception = (Exception) request.getAttribute("javax.servlet.error.exception");
       // 这里处理自定义的error错误页面,比如获取statusCode、Exception等信息,进行处理
       return "/error/404.html";
   }

   @Override
   public String getErrorPath() {
       return ERROR_PATH;
   }

}
```

  1. 运行SpringBoot应用,通过浏览器访问不存在的URL,比如http://localhost:8080/no_exist,应该可以看到自定义的404错误页了。

示例二:使用ErrorPageRegistrar

  1. /resource/static/error下新建一个文件404.html,内容同示例一。

  2. 在SpringBoot应用中新建一个类MyErrorPageRegistrar,实现ErrorPageRegistrar接口,如下所示:

@Configuration
public class MyErrorPageRegistrar implements ErrorPageRegistrar {
@Override
public void registerErrorPages(ErrorPageRegistry registry) {
registry.addErrorPages(new ErrorPage(HttpStatus.NOT_FOUND, "/404"));
registry.addErrorPages(new ErrorPage(HttpStatus.INTERNAL_SERVER_ERROR, "/500"));
}
}

  1. 在SpringBoot应用中新建一个类MyErrorController,用于处理自定义的404错误页面,如下所示:

@Controller
public class MyErrorController {
@RequestMapping("/404")
public String handleError(HttpServletRequest request, HttpServletResponse response) {
// 这里处理自定义的404错误页面,比如获取Referer等信息,进行处理
return "/error/404.html";
}
}

  1. 运行SpringBoot应用,通过浏览器访问不存在的URL,比如http://localhost:8080/no_exist,应该也可以看到自定义的404错误页了。

以上就是完整的“SpringBoot自定义/error路径失效的解决”攻略,希望能对读者有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:SpringBoot自定义/error路径失效的解决 - Python技术站

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

相关文章

  • SpringMVC返回的ResponseEntity出现乱码及解决

    下面是关于SpringMVC返回的ResponseEntity出现乱码及解决的完整攻略。 问题描述 在使用SpringMVC框架进行开发时,返回的ResponseEntity对象的中文内容可能会出现乱码问题。这是因为在返回ResponseEntity时,其默认编码格式为ISO-8859-1,而不是UTF-8。 解决方法 方法一:设置Http Headers编…

    Java 2023年5月20日
    00
  • Jackson常用方法以及jacksonUtil工具类详解

    Jackson常用方法以及jacksonUtil工具类详解 什么是Jackson Jackson是一个开源的Java库,用于处理JSON格式数据。Jackson能够将Java对象转换成JSON格式的字符串,并且还能将JSON格式的字符串转换成Java对象。在Java Web开发中,使用Jackson能够简化代码并且提高效率。 常用方法 将Java 对象转换为…

    Java 2023年5月26日
    00
  • jquery自定义下拉列表示例

    下面我来详细讲解一下“jQuery自定义下拉列表”的制作方法。 1. 简介 自定义下拉列表可以提升页面的交互体验,并且可以使页面更加美观。本文将使用jQuery来创建自定义下拉列表,包括如何使用HTML、CSS和JavaScript来实现。 2. 实现过程 下面我们以两个示例来详细讲解如何实现自定义下拉列表。 示例一 在这个示例中,我们将使用一个普通的&lt…

    Java 2023年5月19日
    00
  • Hibernate的一对一,一对多/多对一关联保存的实现

    Hibernate是一种优秀的ORM框架,它能够有效地使Java应用程序与数据库交互。在Hibernate中,实体之间的关系是通过映射关系来维护的,在映射关系中,一对一、一对多和多对一是最为常见的关系类型。本文将详细讲解Hibernate的一对一、一对多/多对一关联保存的实现全过程。 一对一关系保存实现 首先我们需要定义两个实体类,分别代表两个具有一对一关系…

    Java 2023年5月19日
    00
  • 利用Lambda表达式创建新线程案例

    利用Lambda表达式创建新线程案例的完整攻略: 1. 创建新线程的步骤 创建新线程通常包含以下几个步骤: 定义线程要执行的任务:在实现Runnable接口的run()方法中编写线程任务的逻辑。 创建线程对象:使用线程类(Thread)的构造函数创建线程对象。 启动线程:使用线程对象的start()方法启动线程。 以上三个步骤可以用Lambda表达式简化为一…

    Java 2023年5月19日
    00
  • 简单快速的实现js计算器功能

    下面是实现JavaScript计算器的攻略: 1. HTML 首先,我们需要在HTML文件中建立一个简单的页面来承载计算器组件。这可以通过使用HTML表单元素和按钮来完成。 <!DOCTYPE html> <html> <head> <title>JavaScript Calculator</title&…

    Java 2023年6月15日
    00
  • SpringBoot使用JWT实现登录验证的方法示例

    以下是“SpringBoot使用JWT实现登录验证的方法示例”的完整攻略: 1. 什么是JWT? JWT(JSON Web Token)是由JSON生成的令牌,通常用于身份验证和授权。它是一个开放标准(RFC 7519),通过在不同方之间安全地传输声明来作为JSON Web签名(JWS)或JSON Web加密(JWE)的方式。在Spring Boot中使用J…

    Java 2023年5月20日
    00
  • 腾讯云服务器搭建Jenkins详细介绍

    腾讯云服务器搭建Jenkins详细介绍 介绍 Jenkins是一个自动化工具,它提供了很多插件和工具,可以用于构建、测试和部署软件。本文将介绍如何在腾讯云服务器上搭建Jenkins。 步骤 选择合适的云服务器 在腾讯云控制台中,选择云服务器服务,然后选择合适的云服务器实例。可以根据自己的需求选择不同的规格、地区、镜像等选项。 开启端口 要使用Jenkins,…

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