我在我的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。
答案 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");
}