如您所知,它SimpleMappingExceptionResolver
不适用于视图层中引发的异常。它实现了接口HandlerExceptionResolver
,顾名思义,该接口仅处理由处理程序(即控制器)引发的异常。
如果您需要处理视图引发的异常,则可以编写一个HandlerInterceptor
,重写该afterCompletion()
方法,或者编写一个非Spring servlet Filter
。在这两种情况下,您都无法利用Spring的视图解析器,而必须自己处理渲染。
但是要提醒一句- 当您在视图层中获取异常时,并非总是能够优雅地处理它们,因为在引发异常时服务器可能已开始将视图输出刷新到客户端,在这种情况下,服务器然后无法呈现单独的错误页面。这就是为什么最好在控制器层中执行尽可能多的逻辑,以便尽早捕获异常的原因。