【发布时间】:2016-12-07 10:49:15
【问题描述】:
我正在尝试在我的 Spring Boot 1.4 应用程序中使用我自己的自定义错误页面。根据文档,将我的错误页面放在src/main/resources/public/error 目录中就足够了(例如404.html)。
但是,我也在我的应用程序中使用 JSP 页面,并且有一个解析器:
@Override
public void configureViewResolvers(final ViewResolverRegistry registry) {
final UrlBasedViewResolverRegistration resolver = registry.jsp("/WEB-INF/jsp/", ".jsp");
final Map<String, Object> attributes = new HashMap<>();
attributes.put("HASH", hashReader.getHashValue());
attributes.put("Hoker", hookerReader.getHooker());
resolver.attributes(attributes);
}
每当我遇到4xx 错误时,它不会使用我放在resources/public/error 目录中的自定义错误页面,而是尝试加载/WEB-INF/jsp/error.jsp。
有没有办法强制 Spring Boot 使用其默认行为,而不是尝试将错误页面解析到 JSP 目录?
【问题讨论】:
-
这实际上是默认行为...它尝试解析为名为
404的视图(或任何取决于错误代码的视图)。这将传递给您的视图解析器,该解析器没有(但由于它是基于 Url 的版本总是返回一个 URL)。重定向失败,这反过来会导致尝试解析名为error的视图,该视图又会再次传递给您的视图解析器。 -
但我在 resources/public/error/404.html 中有一个视图名称。但它被忽略了
-
正确。这就是我解释的...
404是视图名称,它被传递给您的ViewResolver,它试图解析/WEB-INF/jsp/404.jsp上的视图。默认行为实际上就是这样。通常,当没有注册UrlBasedViewResolver时,它最终会传递给默认的静态资源处理。但是由于UrlBasedViewResolver的存在而没有发生。
标签: java jsp spring-boot error-handling