3

好的,所以我在一个我们使用 spring 的项目中,据我所知,何时引发运行时异常并由 SimpleMappingExceptionResolver 处理,然后当我们注册的拦截器的 postHandle 方法被调用时,它是一个空模型和看法。

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

干杯,克里斯。

4

2 回答 2

1

我正在扩展@masted 的评论。真正的拦截器没有被调用,当请求由 ExceptionResolver 处理时,根据文档,该HanlerInterceptor#afterCompletion方法是在视图渲染之后调用的,所以它也对我们没有帮助。

我对此的解决方案是创建我自己的ExceptionHandler来扩展AbstractHandlerMethodExceptionResolver和自动连接我的拦截器。然后在将视图名称设置为我ModelAndView并将异常放在那里之后,我调用我的拦截器的postHandle()方法。

它相对干净,是我让它工作的唯一方法。

于 2014-03-04T12:52:37.557 回答
1

我不确定我们是否有相同的情况,但是对于我的情况,当系统因为 ModelAndView 为空而无法解析 View 时,我想显示一个页面,通知“未找到 404 请求”。最初我尝试使用 SimpleMappingExceptionResolver 并将“404 请求未找到”的视图名称放入地图(视图名称称为“/404NotFound”)。但我找不到正确的例外。

最后,我为解决我的问题所做的是修改 web.xml 并将其放入:

    <error-page>
    <error-code>404</error-code>
    <location>/404NotFound</location>
    </error-page>

而且由于我们不需要任何控制器来处理 404NotFound(直接渲染它),我将这段代码放在 mvc 的应用程序上下文中。

    <mvc:view-controller path="/404NotFound"/>
于 2014-02-14T08:59:01.430 回答