2017-08-11 52 views
0

可以說我在我的應用程序中使用了@ExceptionHandlerSpring @ ExceptionHandler行爲

如果我定義:

@ControllerAdvice 
public class MyExceptionHandler { 

    @ExceptionHandler(value = Exception.class) 
    public boolean generic(Exception e) { 
     return e; 
    } 

    @ExceptionHandler(value =MyException.class) 
    public boolean myException(MyException e) { 
     return e; 
    } 
} 

伊爾我控制器拋出一個MyException,將通用異常處理程序也引發或僅與異常會被執行的最佳匹配(這裏的MyException處理程序)?

+1

這可能會幫助您:https://stackoverflow.com/questions/19498378/setting-precedence-of-multiple-controlleradvice-exceptionhandlers – Thoomas

+0

是的,謝謝! 「發生異常時,ExceptionHandlerExceptionResolver將迭代這些ExceptionHandlerMethodResolver並使用第一個可以處理異常的異常。」部分正是我所需要的。 – Akah

+0

如果你需要,你可以用'@ Order'命令它們。 – Thoomas

回答

2

異常處理程序將嘗試找到特定異常MyException處理首先,如果沒有它會嘗試找到一般異常Exception)。

因此對於您的示例,當控制器throwMyException時,處理程序將調用MyException處理程序。

異常參數:聲明爲一般異常或作爲 更具體的異常。如果 註釋本身不通過其 {@link #value()}縮小例外類型,這也可用作映射提示。請求和/或響應對象(Servlet API 或Portlet API)。

參考:https://github.com/spring-projects/spring-framework/blob/5f4d1a4628513ab34098fa3f92ba03aa20fc4204/spring-web/src/main/java/org/springframework/web/bind/annotation/ExceptionHandler.java#L33

+0

好吧,你說只有一個Handler會被觸發:最匹配的那個。 – Akah

相關問題