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

SpringBoot自定义状态码错误页:无法跳转至自定义错误页问题

解决Spring Boot无法重定向到自定义错误页面的问题

问题根源分析

你的配置和代码存在几个关键问题,导致自定义错误页面无法生效:

  1. @RestController注解误用:该注解会将返回值直接作为HTTP响应体返回(等同于@Controller + @ResponseBody),而非将字符串视为视图名称去匹配对应的页面文件。
  2. 资源映射配置冲突:spring.web.resources.add-mappings: false会关闭Spring默认的资源映射规则,可能导致视图解析器无法找到你的自定义错误页面文件。
  3. API版本兼容性(可选):Spring Boot 2.3+版本中ErrorController接口已被标记为过时,虽仍可使用,但推荐采用更现代的错误处理方式。

修复步骤

1. 修改控制器注解

将@RestController替换为@Controller,这样返回的字符串会被视图解析器处理,定位到对应的错误页面:

@Controller
@RequiredArgsConstructor
public class CustomErrorController implements ErrorController {
  private static final String PATH = "/error";

  @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";
      } else if (statusCode == HttpStatus.INTERNAL_SERVER_ERROR.value()) {
        return "error-500";
      }
    }
    return "error";
  }
}

2. 调整资源映射配置

如果没有特殊需求,建议移除spring.web.resources.add-mappings: false配置,让Spring默认处理资源和视图映射。若必须关闭该配置,需确保视图解析器已正确配置,能找到你的错误页面文件(比如Thymeleaf模板需放在src/main/resources/templates/目录,JSP需放在src/main/webapp/WEB-INF/views/目录)。

3. 确认错误页面存在

确保自定义错误页面文件(如error-404.html、error-500.html、error.html)存在于视图解析器对应的目录中,文件名与控制器返回的字符串完全匹配。

4. 检查路径拦截

确保没有其他@Controller或过滤器拦截/error路径,避免自定义错误处理逻辑被覆盖。

替代方案(Spring Boot 2.3+推荐)

对于新版本Spring Boot,建议使用@ControllerAdvice结合@ExceptionHandler实现全局错误处理,示例如下:

@ControllerAdvice
public class GlobalExceptionHandler {

    @ExceptionHandler(value = Exception.class)
    public String handleException(HttpServletRequest request, Exception e) {
        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";
            } else if (statusCode == HttpStatus.INTERNAL_SERVER_ERROR.value()) {
                return "error-500";
            }
        }
        return "error";
    }
}

使用该方案时,同样需要确保server.error.whitelabel.enabled: false,且视图文件配置正确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 00:22:04