我有
@Controller
@RequestMapping(value="core/*")
public class CoreController {
public static String exceptionOccurredView = "/core/exceptionOccurred";
@ExceptionHandler(Throwable.class)
public ModelAndView exceptionOccurred(Throwable exception, HttpServletResponse response, HttpServletRequest request) {
ModelAndView mv = new ModelAndView();
mv.setViewName ( exceptionOccurredView );
mv.addObject ( "requestedUrl", Core.getCurrentUrlWithParams() );
mv.addObject ( "exception", exception );
System.out.println( "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + Core.getCurrentUrlWithParams() );
return mv;
}
@RequestMapping
public void test0(HttpServletResponse response, HttpServletRequest request) throws IOException {
throw new IOException();
}
}
适用于核心网址下发生的所有事件。
如果我去网址
localhost:8080 / core / test0
显示错误页面。如果我去:
localhost:8080 / core / actionDoesNotExist
但如果我使用:
localhost:8080 / controllerDoesNotExist / test0
错误未显示,因为注释@ExceptionHandler仅对每个控制器有效。
那么如何实现全局,非控制器附加异常/错误处理程序?
答案 0 :(得分:1)
一种方法是使用HandlerExceptionResolver
的某些实现。
例如,要使用`SimpleMappingExceptionResolver,请将其放在您的上下文中:
<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
<property name="exceptionMappings">
<map>
<entry key="IOException" value="io-error" />
</map>
</property>
<property name="defaultErrorView" value="default-error"/>
</bean>
这样就可以定义从异常到错误页面的全局映射。如果您需要更复杂的错误处理,请实现自己的解析器。