Catch Spring MVC没有映射错误

时间:2010-09-27 08:04:57

标签: spring spring-mvc

我在我的Web配置文件中配置了以下异常解析程序,但我不确定它为什么无法处理 这样的错误'找不到servlet请求的匹配错误:路径'/ etc'

<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
    <property name="exceptionMappings">
        <props>
            <prop key="java.lang.Exception">
                exception
            </prop>
        </props>
    </property>
</bean>

我的应用程序依赖于Ajax,并且有些情况下我会根据一些用户交互更改目标网址。

我的问题是,我是否有可能在我的Spring MVC中捕获错误并将其转发到我的exception.jsp,以便我的用户不会得到 一个讨厌的 404。

2 个答案:

答案 0 :(得分:2)

SimpleMappingExceptionResolver(以及一般的HandlerExceptionResolver框架)将仅被调用以处理请求处理程序(即您的控制器)生成的异常。如果没有配置处理程序来处理请求,那么它将不会那么远,并且不会调用你的解析器。

您最简单的方法是在web.xml中配置404处理页面,例如

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

答案 1 :(得分:1)

您可以设置一个全能@RequestMapping并在执行时抛出自定义异常。然后,您可以使用SimpleMappingExceptionResolver@ExceptionHandler方法处理该异常(可能在@ControllerAdvice类中)。

全能控制器:

@RequestMapping(value = "/**")
public ModelAndView noHandlerMappingFound() throws HandlerNotFoundException {
    throw new HandlerNotFoundException("No handler mapping found.");
}

此处HandlerNotFoundException是您的自定义异常类型。

控制器建议:

@ExceptionHandler(NoSuchEntityException.class)
@ResponseStatus(HttpStatus.NOT_FOUND)
public ModelAndView handleNoSuchEntityException(final HttpServletRequest req, final Exception ex) {
    return new ModelAndView("error-page");
}