【发布时间】:2021-03-10 15:29:05
【问题描述】:
我正在尝试修复我们的 Spring Web 应用程序,该应用程序无法正确显示未捕获的异常错误。 (几年没做)它只是显示html代码,而不是渲染它。 ResourceNotFound 等其他错误很好地显示了他们的自定义错误页面。
据我了解,在 WEB-INF/web.xml 中是这样的:
<error-page>
<location>/uncaughtException</location>
</error-page>
那个东西将它路由到控制器,UncaughtExceptionViewController:
@RequestMapping("/uncaughtException")
@Controller
public class UncaughtExceptionViewController {
@RequestMapping
public String uncaughtException() {
return "uncaughtException";
}
}
然后转到相应的views.xml:
<definition extends="basePage" name="uncaughtException">
<put-attribute name="body" value="/WEB-INF/views/uncaughtExceptionWorkaround.jspx"/>
</definition>
我已经搞砸了 basePage 和 uncaughtExceptionWorkaround.jspx (基本上将它们简化为干净的<html><body></body></html>),我认为错误不在其中。它们的代码内容显示在屏幕上。
它确实会在控制器中遇到断点。也例如我们的 ResourceNotFoundViewController 完美运行,并且非常相似:
<error-page>
<error-code>404</error-code>
<location>/resourceNotFound</location>
</error-page>
'
@RequestMapping("/resourceNotFound")
@Controller
public class ResourceNotFoundViewController {
@RequestMapping
public String resourceNotFound() {
return "resourceNotFound";
}
}
我尝试向 applicationContext-security.xml 添加内容
<intercept-url pattern="/uncaughtException" access="permitAll"/>
并修改控制器注释,如:
@RequestMapping(produces = "text/html")
我还尝试将位置更改为“/uncaughtException2”和this,但问题仍然存在。
未捕获的异常和有效的东西之间的一个区别是 webmvc-config.xml 中的这个 bean:
<bean class="se.justLog.server.spring.LoggingExceptionResolver" p:defaultErrorView="uncaughtException">
<property name="exceptionMappings">
<props>
<prop key=".DataAccessException">dataAccessFailure</prop>
<prop key=".NoSuchRequestHandlingMethodException">resourceNotFound</prop>
<prop key=".TypeMismatchException">resourceNotFound</prop>
<prop key=".MissingServletRequestParameterException">resourceNotFound</prop>
<prop key=".ResetPasswordException">resetpasswordfailed</prop>
</props>
</property>
</bean>
我尝试添加 .RuntimeException 以查看是否有任何不同,但没有。
有趣!如果我删除整个 LoggingExceptionResolver(这是一个 SimpleMappingExceptionResolver)bean,然后 HTML 呈现,但 .jspx 页面中的异常变量变为空,因此它不显示错误。
这个非常有趣,你有什么想法吗? (我不是 Spring 专家,是否有一些我遗漏了调查的步骤?)
编辑:Spring 没有添加 Content-type: text/html 标头,这是问题所在。
【问题讨论】:
标签: spring spring-mvc