2012-04-04 18 views
0

春天,出現了錯誤發生的視圖上的異常或404

@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(); 
    } 

} 

的正常工作核心URL下存在的所有產生的異常。

如果我去的URL

本地主機:8080 /核心/ TEST0

錯誤頁面顯示。另外,如果我去:

本地主機:8080 /核心/ actionDoesNotExist

,但如果我使用:

本地主機:8080/controllerDoesNotExist/TEST0

的錯誤沒有得到因爲註釋@ExceptionHandler僅對每個控制器有效。

那麼如何實現一個全局的,非控制器附加的異常/錯誤處理程序?

回答

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> 

你定義從一個例外全局映射到錯誤頁面的方式。如果您需要更復雜的錯誤處理,請實施您自己的解析器。

+0

是否有可能不呈現一個視圖,但重定向到一個控制器/動作的一些prepropccessing? – momomo 2012-04-04 13:45:08

+0

我猜你必須創建你自己的HandlerExceptionResolver實現..謝謝! – momomo 2012-04-04 13:49:13

+0

我很快就接受了你的答案,經過測試,得到了同樣的結果:( – momomo 2012-04-04 14:07:12