Spring,显示异常或404上发生错误的视图

时间:2012-04-04 12:57:26

标签: java spring java-ee spring-mvc

我有

@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仅对每个控制器有效。

那么如何实现全局,非控制器附加异常/错误处理程序?

1 个答案:

答案 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>

这样就可以定义从异常到错误页面的全局映射。如果您需要更复杂的错误处理,请实现自己的解析器。