当从SimpleMappingExceptionResolver映射Exception时,Interceptor中的ModelAndView为null

时间:2012-07-16 15:27:10

标签: spring spring-mvc exception-handling interceptor

好的,所以我正处于一个我们使用spring的项目,据我所知,当SimpleMappingExceptionResolver引发运行时异常并处理它时,那么当我们注册的拦截器的postHandle方法被调用时,它就是一个空模型和视图。

我不太了解spring MVC如何挂起,但我认为SimpleMappingExceptionResolver将异常类型映射到ModelAndView。并且这个ModelAndView对象可用于拦截器将东西填充到模型中。如果不是这样,请随时告诉我为什么,如果是,为什么我在拦截器中看到null ModelAndView?

干杯,克里斯。

2 个答案:

答案 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()方法。

它相对干净,只有这样才能让它发挥作用。

相关问题