我在一个独立的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”注册为标准视图控制器和@Controller
请求映射(另请注意,如果我直接转到浏览器中的/ errors / 404)网址已解析并显示页面
任何人都可以对此有所了解吗?
答案 0 :(得分:0)
这是我的错误 - 是因为web.xml被意外删除而引起的 - 所以RequestDispatcher不可用。
添加web.xml解决了这个问题。
与行为类似: