gpt4 book ai didi

java - Spring Boot - ErrorPageFilter 找不到 RequestDispatcher

转载 作者:太空宇宙 更新时间:2023-11-04 14:12:21 27 4
gpt4 key购买 nike

我有一个在独立 Tomcat 容器中运行的 Spring Boot 应用程序 - 我在使全局错误处理正常工作(自定义 404 页面等)方面一直在慢慢取得进展,并且 ErrorPageFilter 类是现在捕获错误,但它会抛出 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$000(ErrorPageFilter.java:59)
org.springframework.boot.context.web.ErrorPageFilter$1.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”注册为标准 View Controller 和@Controller请求映射(另请注意,如果我直接转到/errors/404在浏览器中解析 url 并显示页面)

有人能解释一下吗?

最佳答案

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

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

类似于行为:

Tomcat unable to find jsp in war file

Spring MVC - Could not get RequestDispatcher

关于java - Spring Boot - ErrorPageFilter 找不到 RequestDispatcher,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28168365/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com