好的,所以我正处于一个我们使用spring的项目,据我所知,当SimpleMappingExceptionResolver引发运行时异常并处理它时,那么当我们注册的拦截器的postHandle方法被调用时,它就是一个空模型和视图。
我不太了解spring MVC如何挂起,但我认为SimpleMappingExceptionResolver将异常类型映射到ModelAndView。并且这个ModelAndView对象可用于拦截器将东西填充到模型中。如果不是这样,请随时告诉我为什么,如果是,为什么我在拦截器中看到null ModelAndView?
干杯,克里斯。
答案 0 :(得分:1)
我不确定我们是否有相同的情况,但对于我的情况,当系统无法解析View因为ModelAndView为null时,我想显示一个通知“404请求未找到”的页面。最初我尝试使用SimpleMappingExceptionResolver并在地图中添加“404 request not found”的viewNames(viewNames calles“/ 404NotFound”)。但我找不到正确的例外。
最后,我为解决我的问题所做的是修改web.xml并将其放入:
<error-page>
<error-code>404</error-code>
<location>/404NotFound</location>
</error-page>
由于我们不需要任何控制器来处理404NotFound(只是按原样呈现),我将此代码放在mvc的应用程序上下文中。
<mvc:view-controller path="/404NotFound"/>
答案 1 :(得分:0)
我正在扩大@ masted的评论。当ExceptionResolver处理请求时,不会调用Really Interceptor,并且根据documentation在视图渲染后调用HanlerInterceptor#afterCompletion
方法,因此它也无法帮助我们。
我的解决方案是创建我自己的 ExceptionHandler ,它扩展AbstractHandlerMethodExceptionResolver
并自动装载我的拦截器。然后在将视图名称设置为ModelAndView
之后,在将异常放入其中之后,我调用拦截器的postHandle()
方法。
它相对干净,只有这样才能让它发挥作用。