2013-06-19 189 views
1

有無數篇文章解釋了使用Spring 3 MVC進行基本的異常處理,我已經成功地實現了它。所以現在當我的一個控制器拋出一個Exception類時,它會被我的自定義異常處理程序正確捕獲。如何配置Spring 3 MVC來處理類似於異常的錯誤?

但是,我無法得到它將Error類拋出到我的自定義異常處理程序,這就是我需要的。某些第三方庫會拋出錯誤,這些錯誤簡單地繞過了我的Spring錯誤處理配置,這似乎只適用於Exception及其子類。

有什麼辦法可以配置它也​​包括我的自定義異常處理程序中的錯誤類型?

下面的代碼演示瞭如何設置我的了:

<bean id="exceptionResolver" class="com.test.ExceptionHandler" p:order="2" > 


    <property name="defaultErrorView" value="error"/> 
    </bean> 
+1

您遇到錯誤,這意味着您在代碼中做了錯誤。我們不應該捕捉並處理錯誤。如果您想停止在視圖中顯示錯誤堆棧跟蹤,只需在部署描述符中爲500錯誤代碼提供映射並返回錯誤頁面。 –

+1

你不處理錯誤,你消除它們。如果您的應用在運行時期待錯誤,則可能不穩定。 –

回答

2

我們使用的模式是有一個BaseController,我們所有的控制器使用以下格式有映射到特定的HTTP狀態特定的錯誤延伸例外:

@Controller 
public class BaseController { 

    @ExceptionHandler (Exception.class) 
    @ResponseStatus (HttpStatus.INTERNAL_SERVER_ERROR) 
    public ModelAndView handleAllExceptions(Exception ex) { 
     return new JsonError(ex.getMessage()).asModelAndView(); 
    } 

    @ExceptionHandler (InvalidArticleQueryRangeException.class) 
    @ResponseStatus (HttpStatus.NOT_FOUND) 
    public ModelAndView handleAllExceptions(InvalidArticleQueryRangeException ex) { 
     return new JsonError(ex.getMessage()).asModelAndView(); 
    } 
} 
+0

你認爲這可行嗎? @ExceptionHandler(Error.class) – Trant

+0

@Trant不確定,我會問你爲什麼要這樣做。通常,錯誤表示虛擬機或代碼中發生災難性故障。就我個人而言,我認爲你的控制器之外的代碼應該拋出異常而不是錯誤。 – Jim

+0

@Trant說,它應該爲註釋工作的API是公共抽象類<?擴展Throwable>,該錯誤會執行。 – Jim