SimpleMappingExceptionResolver не разрешается 404 - PullRequest
0 голосов
/ 17 ноября 2011

Ниже мой конфигурационный файл пружины:

<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().

В CustomSimpleMappingExceptionResolver класс resolveException() не вызывается в случае 404.

Ответы [ 2 ]

1 голос
/ 23 ноября 2011

Установить страницу ошибки в 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
}
1 голос
/ 18 ноября 2011

Объявление может быть неправильным; использовать карту вместо свойств.

<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, который вернется в ваш сервлет, где вы сможете обработать его любым удобным вам способом.

...