Spring 自定义 404 错误页面教程

  • Post category:Java

以下是关于Spring自定义404错误页面的完整攻略。

Spring自定义404错误页面基本原理

Spring自定义404错误页面是指在Web应用程序中自定义404错误。当用户访问不存在的页面时,将显示自定义的404错误页面。Spring自定义404错误页面的步骤如下:

  1. 创建404错误页面
  2. 配置Spring MVC
  3. 测试自定义404错误页面

下面将详细说明每步。

步骤1:创建404错误页面

在使用Spring自定义404错误页面之前,需要先创建404错误页面。可以使用以下示例:

<!DOCTYPE html>
<html>
<head>
    <title>404 Not Found</title>
</head>
<body>
    <h1>404 Not Found</h1>
    <p>The requested resource could not be found.</p>
</body>
</html>

在上面的示例中,我们创建了一个404错误页面,并在页面显示了错误信息。

步骤2:配置Spring MVC

在创建了404错误页面之后,就需要配置Spring MVC了。可以使用以下示例:

@Configuration
@EnableWebMvc
public class MvcConfig implements WebMvcConfigurer {
    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
        registry.addViewController("/404").setViewName("404");
    }
}

在上面的示例中,我们创建了一个MvcConfig类,并使用@EnableWebMvc注解启用Spring MVC。在addViewControllers()方法中,我们将/404路径映射到404页面。

步骤3:测试自定义404错误页面

在配置了Spring MVC之后,就可以测试自定义404错误页面了。可以使用以下示例:

@RestController
public class TestController {
    @GetMapping("/test")
    public String test() {
        throw new ResourceNotFoundException();
    }
}

在上面的示例中,我们创建了一个TestController类,并在控制器方法中抛出了ResourceNotFoundException异常。

@ResponseStatus(HttpStatus_FOUND)
public class ResourceNotFoundException extends RuntimeException {
}

在上面的示例中,我们创建了一个ResourceNotFoundException类,并使用@ResponseStatus(HttpStatus.NOT_FOUND)注解将其映射到HTTP 404状态码。

示例

下面是两个使用Spring自定义404错误页面的示例:

示例1:使用Spring自定义404错误页面

在这个示例中我们将使用Spring自定义404错误页面。

MvcConfig.java

@Configuration
@EnableWebMvc
public class MvcConfig implements WebMvcConfigurer {
    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
        registry.addViewController("/404").setViewName("404");
    }
}

在上面的示例中,我们创建了一个MvcConfig类,并使用@EnableWebMvc注解启用Spring MVC。在addViewControllers()方法中,我们将/404路径映射到404错误页面。

TestController.java

@RestController
public class TestController {
    @GetMapping("/test")
    public String test() {
        throw new ResourceNotFoundException();
    }
}

在上面的示例中,我们创建了一个TestController类,并在控制器方法中抛出了ResourceNotFoundException异常。

ResourceNotFoundException.java

@ResponseStatus(HttpStatus.NOT_FOUND)
public class ResourceNotFoundException extends RuntimeException {
}

在上面的示例中,我们创建了一个ResourceNotFoundException类,并使用@ResponseStatus(HttpStatus.NOT_FOUND)注解将其映射到HTTP 404状态码。

404.html

<!DOCTYPE>
<html>
<head>
    <title>404 Not Found</title>
</head>
<body>
    <h1>404 Not Found</h1>
    <p>The requested resource could not be found.</p>
</body>
</html>

在上面的示例中,我们创建了一个404错误页面,并在页面中显示了错误信息。

示例2:使用Thymeleaf自定义404错误页面

在这个示例中,我们将使用Thymeleaf自定义404错误。

MvcConfig.java

@Configuration
@EnableWebMvc
public class MvcConfig implements WebMvcConfigurer {
    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
        registry.addViewController("/404").setViewName("404");
    }

    @Bean
    public ITemplateResolver templateResolver() {
        SpringResourceTemplateResolver resolver = new SpringResourceTemplateResolver();
        resolver.setPrefix("/WEB-INF/views/");
        resolver.setSuffix(".html");
        resolver.setTemplateMode(TemplateMode.HTML);
        resolver.setCharacterEncoding("UTF-8");
        return resolver;
    }

    @Bean
    public SpringTemplateEngine templateEngine() {
        SpringTemplateEngine engine = new SpringTemplateEngine();
        engine.setTemplateResolver(templateResolver());
        return engine;
    }

    @Bean
    public ViewResolver viewResolver() {
        ThymeleafViewResolver resolver = new ThymeleafViewResolver();
        resolver.setTemplateEngine(templateEngine());
        resolver.setCharacterEncoding("UTF-8");
        return resolver;
    }
}

在上面的示例中,我们创建了一个MvcConfig类,并使用@EnableWebMvc注解启用Spring MVC。在addViewControllers()方法中,我们将/404路径映射到404错误页面。在template()方法中,我们创建了一个ITemplateResolver对象,并设置了模板的前缀、后缀、模板模式和字符编码。在templateEngine()方法中,我们创建了一个SpringTemplateEngine对象,并设置了模板解析器。在viewResolver()方法中,我们创建了一个ViewResolver对象,并设置了模板引擎和字符编码。

TestController.java

@RestController
public class TestController {
    @GetMapping("/test")
    public String test() {
        throw new ResourceNotFoundException();
    }
}

在上面的示例中,我们创建了一个TestController类,并在控制器方法中抛出了ResourceNotFoundException异常。

ResourceNotFoundException.java

@ResponseStatus(HttpStatus.NOT_FOUND)
public class ResourceNotFoundException extends RuntimeException {
}

在上面的示例中,我们创建了一个ResourceNotFoundException类,并使用@ResponseStatus(HttpStatus.NOT_FOUND)注解将其映射到HTTP 404状态码。

404.html

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <title>404 Not Found</title>
</head>
<body>
    <h1>404 Not Found</h1>
    <p th:text="${'The requested resource ' + request.getRequestURI() + ' could not be found.'}"></p>
</body>
</html>

在上面的示例中,我们创建了一个404错误页面,并在页面中显示了错误信息。

总结

以上就是关于Spring自定义404错误页面的完整攻略。Spring自定义404错误页面是一个非常有用的功能,可以帮助我们更好地处理Web应用程序中的错误。