java Spring Boot自定义错误页面

在Spring Boot中自定义错误页面可以让应用程序在遇到特定HTTP错误状态码时,向用户展示更加友好和定制化的错误信息页面。

以下是几种常见的方法来实现这一功能:

1. 静态资源文件夹下的错误页面

Spring Boot默认会从src/main/resources/static/error或src/main/resources/public/error目录下查找错误页面。

需要按照HTTP状态码命名这些错误页面,例如,为了自定义404错误页面,可以创建一个名为404.html的文件在这个目录下。

2. 使用ErrorController

创建一个类实现ErrorController接口,覆盖其getErrorPath方法,并定义一个处理方法来返回自定义错误视图。

例如:

java 复制代码
import org.springframework.boot.web.servlet.error.ErrorController;
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import javax.servlet.RequestDispatcher;
import javax.servlet.http.HttpServletRequest;

@Controller
public class CustomErrorController implements ErrorController {

    @RequestMapping("/error")
    public String handleError(HttpServletRequest request) {
        Object status = request.getAttribute(RequestDispatcher.ERROR_STATUS_CODE);

        if (status != null) {
            Integer statusCode = Integer.valueOf(status.toString());

            if (statusCode == HttpStatus.NOT_FOUND.value()) {
                return "error/404"; // 假设有在templates目录下的error/404.html
            } else if (statusCode == HttpStatus.INTERNAL_SERVER_ERROR.value()) {
                return "error/500"; // 同上,对应500错误页面
            }
            // 可以添加更多错误处理逻辑
        }
        return "error/default"; // 默认错误页面
    }

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

3. 使用@ExceptionHandler注解

在控制器类中,可以使用@ExceptionHandler注解来处理特定的异常,并返回自定义的视图。这种方式适用于处理特定业务异常。

java 复制代码
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.servlet.ModelAndView;

@ControllerAdvice
public class GlobalExceptionHandler {

    @ExceptionHandler(value = {NotFoundException.class})
    public ModelAndView handleNotFoundException(Exception e) {
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.addObject("errorMessage", e.getMessage());
        modelAndView.setViewName("error/404"); // 对应的错误页面
        return modelAndView;
    }
}

4. 配置Whitelabel Error Page

如果不希望使用Spring Boot默认的白色标签错误页面,可以在application.properties或application.yml中关闭它:

XML 复制代码
spring.mvc.throw-exception-if-no-handler-found=true
spring.resources.add-mappings=false
server.error.whitelabel.enabled=false
相关推荐
Gofarlic_oms14 小时前
利用API实现ANSYS许可证管理自动化集成
运维·服务器·开发语言·matlab·自动化·负载均衡
AI+程序员在路上5 小时前
VS Code 完全使用指南:下载、安装、核心功能与 内置AI 编程助手实战
开发语言·人工智能·windows·开源
invicinble6 小时前
这里对java的知识体系做一个全域的介绍
java·开发语言·python
catchadmin6 小时前
使用 PHP TrueAsync 改造 Laravel 协程异步化的可行路径
开发语言·php·laravel
wbs_scy6 小时前
【Linux 线程进阶】进程 vs 线程资源划分 + 线程控制全详解
java·开发语言
ss2736 小时前
食谱推荐系统功能测试如何写?
java·数据库·spring boot·功能测试
2301_811274316 小时前
基于SpringBoot的智能家居管理系统
spring boot·后端·智能家居
毕设源码_古学姐6 小时前
计算机毕业设计springboot智能家居项目管理系统 基于SpringBoot的智能家居项目管理平台设计与实现 SpringBoot技术驱动的智能家居项目管理系统开发
spring boot·智能家居·课程设计
毕设源码-张学姐6 小时前
计算机毕业设计springboot智能家居设备信息管理系统 基于SpringBoot的智能家居设备全生命周期管理平台 面向智慧家庭的SpringBoot设备资产与场景运营系统
spring boot·智能家居·课程设计
AI人工智能+电脑小能手6 小时前
【大白话说Java面试题】【Java基础篇】第15题:JDK1.7中HashMap扩容为什么会发生死循环?如何解决
java·开发语言·数据结构·后端·面试·哈希算法