SimpleMappingExceptionResolver不解析404

时间:2011-11-17 05:48:31

标签: java spring-mvc exception-handling modelandview

以下是我的弹簧配置文件:

<bean class="com.web.handler.CustomSimpleMappingExceptionResolver" >
    <property name="exceptionMappings">
        <props>              
            <prop key="java.lang.Throwable">error</prop>
        </props>
    </property>
</bean>

班级CustomSimpleMappingExceptionResolver

public class CustomSimpleMappingExceptionResolver extends SimpleMappingExceptionResolver{
    @Override
    public ModelAndView resolveException(HttpServletRequest request,
            HttpServletResponse response, Object handler, Exception ex) {

    if(int a = 1)
        return new ModelAndView("ViewName1");
    else
        return new ModelAndView("ViewName2");
    }

我的web.xml没有错误页面。我希望根据resolveException()中的逻辑显示不同的观点。

CustomSimpleMappingExceptionResolverresolveException()中,如果是404,则不会调用{<1}}。

2 个答案:

答案 0 :(得分:1)

声明可能不正确; use a map代替属性。

<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
<property name="exceptionMappings">
  <map>
    <entry key="DataAccessException" value="data-error" />
    <entry key="com.stuff.MyAppRuntimeException" value="app-unchecked-error" />
    <entry key="com.stuff.MyAppCheckedException" value="app-checked-error" />
  </map>
</property>
<property name="defaultErrorView" value="general-error"/>
</bean>

另外,我不确定SimpleMappingExceptionResolver处理在查找处理程序时抛出的错误,而是处理从内部处理程序抛出的错误。也就是说,我不确定404能否抓住这种方式。

如果你在web.xml中放入一个错误处理程序,它将返回到你的servlet,你可以按照自己喜欢的方式处理它。

答案 1 :(得分:1)

在web.xml中设置错误页面

<error-page>
    <error-code>404</error-code>
    <location>/error.html</location>
</error-page>

您的错误页面会在打开后立即重定向。

<html>
    <head>
    <title>Your Page Title</title>
    <meta http-equiv="REFRESH" content="0;url=error.htm">
    </head>
    <body>
    </body>
</html>

控制器中应该有一个请求映射来处理error.htm请求。

@RequestMapping(value={"/error.htm"})
    ModelAndView routToErrorHandler(HttpServletRequest request, HttpServletResponse response) {
//any logic for your themes
}