代码之家  ›  专栏  ›  技术社区  ›  Rachel

Spring SimpleMappingExceptionResolver不进入默认视图

  •  3
  • Rachel  · 技术社区  · 16 年前

    我尝试的是访问应用程序中的特定页面,并让它在handleRequestInternal方法中引发异常。

    当我抛出一个RecoverableDataAccessException(DataAccessException的子类)时,正确的错误页将按预期显示。

    <bean id="exceptionResolver" class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
        <property name="exceptionMappings">
            <props>
                <prop key="org.springframework.dao.DataAccessException">/general/error/500</prop>
                <prop key="freemarker.core.InvalidReferenceException">/general/error/500</prop>
                <prop key="NumberFormatException">/general/error/500</prop>
            </props>
        </property>
        <property name="defaultErrorView" value="/general/error/500" />
    </bean>
    

    我至少希望默认的错误视图能够获得异常并显示我的特定错误页,但这并没有发生。

    [编辑]我正在使用jetty。

    [编辑]我意识到SMER不能处理渲染过程中抛出的错误,这就解释了为什么它不能捕捉到我特别遇到问题的错误。SMER能应付500种风格的错误吗?

    1 回复  |  直到 16 年前
        1
  •  9
  •   skaffman    16 年前

    SimpleMappingExceptionResolver 对于视图层中抛出的异常不起作用。它实现了接口 HandlerExceptionResolver

    如果需要处理视图引发的异常,可以编写 HandlerInterceptor afterCompletion() 方法,或者编写一个非Spring servlet Filter

    不过,有一点需要提醒:当您在视图层中遇到异常时,并不总是能够很好地处理它们,因为在抛出异常时,服务器可能已经开始将视图输出刷新到客户端,在这种情况下,服务器将无法呈现单独的错误页。这就是为什么在控制器层执行尽可能多的逻辑是一种好的做法,以便尽早捕获异常。