You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot中如何重定向HTTP错误响应?自定义错误页问题

Spring Boot 404请求返回JSON而非自定义页面/重定向的解决办法

问题根源

你遇到的情况是因为Spring Boot的错误处理机制会根据请求的Accept请求头判断响应格式,当请求被识别为非HTML类型(比如静态资源请求或AJAX请求)时,默认返回JSON格式错误信息;另外如果错误页面放置位置不对,也会导致无法触发自定义页面。

可行解决方案

1. 正确放置自定义错误页面

将404.html放在以下目录之一:

  • 若使用Thymeleaf等模板引擎:src/main/resources/templates/
  • 静态资源目录:src/main/resources/static/
    Spring Boot会自动根据HTTP状态码匹配对应的错误页面,无需额外配置。

2. 通过配置强制重定向或禁用默认白标错误页

在application.properties中添加配置:

# 直接将所有404请求重定向到主页
server.error.path=/
# 禁用默认的白标错误页,确保自定义页面生效
server.error.whitelabel.enabled=false
# 若使用模板引擎,指定视图前缀后缀(可选)
spring.mvc.view.prefix=/templates/
spring.mvc.view.suffix=.html

3. 自定义ErrorController完全控制逻辑

编写自定义控制器覆盖默认错误处理,精准控制404请求的行为:

import jakarta.servlet.http.HttpServletRequest;
import org.springframework.boot.web.servlet.error.ErrorController;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class CustomErrorController implements ErrorController {

    @RequestMapping("/error")
    public String handleError(HttpServletRequest request) {
        Integer statusCode = (Integer) request.getAttribute("javax.servlet.error.status_code");
        if (statusCode != null && statusCode == 404) {
            // 选择1:重定向到主页
            return "redirect:/";
            // 选择2:返回自定义404页面(需确保页面存在于模板/静态目录)
            // return "404";
        }
        // 其他错误状态码返回默认错误页
        return "error";
    }
}

4. 处理AJAX请求的特殊情况

如果是前端AJAX请求,浏览器通常会发送Accept: application/json,导致Spring Boot返回JSON。若要强制这类请求也返回HTML或重定向,可以在自定义handleError方法中忽略Accept头,直接返回视图。

验证步骤

  1. 重启应用后访问任意不存在的路径(如/randomURL)
  2. 检查浏览器开发者工具的请求头,确认Accept包含text/html
  3. 验证是否跳转到主页或加载自定义404页面

内容的提问来源于stack exchange,提问作者Joaquinm

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 10:55:57