Spring 启动 - ErrorPageFilter 找不到 RequestDispatcher

Spring Boot - ErrorPageFilter cannot find RequestDispatcher

我在一个独立的 Tomcat 容器中有一个 Spring 启动应用程序 运行 - 我在让全局错误处理工作(自定义 404 页面等)方面一直在慢慢取得进展),并且 ErrorPageFilter class 现在正在捕获错误,但它抛出一个 NullPointerException 试图将请求转发给 ErrorPage.

堆栈跟踪如下:

java.lang.NullPointerException
    org.springframework.boot.context.web.ErrorPageFilter.handleErrorStatus(ErrorPageFilter.java:141)
    org.springframework.boot.context.web.ErrorPageFilter.doFilter(ErrorPageFilter.java:112)
    org.springframework.boot.context.web.ErrorPageFilter.access[=11=]0(ErrorPageFilter.java:59)
    org.springframework.boot.context.web.ErrorPageFilter.doFilterInternal(ErrorPageFilter.java:88)
    org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
    org.springframework.boot.context.web.ErrorPageFilter.doFilter(ErrorPageFilter.java:101)

在我的版本上查看 ErrorPageFilter 的源代码,尝试匹配错误路径的 RequestDispatcher 失败:

private void handleErrorStatus(HttpServletRequest request,
    HttpServletResponse response, int status, String message)
    throws ServletException, IOException {

if (response.isCommitted()) {
    handleCommittedResponse(request, null);
    return;
}

String errorPath = getErrorPath(this.statuses, status);
if (errorPath == null) {
    response.sendError(status, message);
    return;
}
response.setStatus(status);
setErrorAttributes(request, status, message);
request.getRequestDispatcher(errorPath).forward(request, response);

(最后一行是NPE)

我的错误处理配置如下,错误配置:

@Configuration
class ErrorConfiguration implements EmbeddedServletContainerCustomizer {

    @Override public void customize( ConfigurableEmbeddedServletContainer container ) {
        container.addErrorPages(new ErrorPage( HttpStatus.NOT_FOUND, "/errors/404" ))
        container.addErrorPages(new ErrorPage( HttpStatus.INTERNAL_SERVER_ERROR, "/errors/500" ))
    }
}

这似乎没问题 - 那些错误页面已注册并且 ErrorPageFilter 正在启动。

我已经尝试将路径“/errors/404”注册为标准视图控制器和 @Controller 请求映射(另请注意,如果我直接转到 /errors/404在浏览器中 url 已解析并显示页面)

任何人都可以阐明这一点吗?

这是我的错误 - 是因为 web.xml 被意外删除 - 因此 RequestDispatcher 不可用。

添加 web.xml 解决了这个问题。

类似于行为:

Tomcat unable to find jsp in war file

Spring MVC - Could not get RequestDispatcher