2013-07-06 36 views
1

我正在使用@ControllerAdvice註釋來定義應用程序級別的異常。現在的問題是我有兩個@ControllerAdvice類,一個用於REST,一個用於普通的Web應用程序。當我爲Exception.class定義@ExceptionHandler時,只考慮第一個。我如何區分兩者?或者我怎樣才能捕獲異常並確定它發生的位置?有沒有辦法,或者我需要使用控制器特定的異常處理程序?處理Spring MVC中的異常以及Rest API

回答

0

我解決了這個問題,爲我的應用程序創建一個自定義異常,併爲它們中的每一個賦予一個異常處理程序方法,並使用@exception處理程序。

我還使用方面來確保每個異常都轉換爲任何自定義異常。

@Aspect 
@Component 
public class ExceptionInterceptor { 

    @AfterThrowing(pointcut = "within(x.y.package..*)", throwing = "t") 
    public void toRuntimeException(Throwable t) 
      throws ApplicationException1, ApplicationException2,ApplicationException3 { 
     if (t instanceof ApplicationException1) { 

      throw (ApplicationException1) t; 
     } else if (t instanceof ApplicationException2) { 

      throw (ApplicationException2) t; 
     } else 
      throw (ApplicationException3) t; 
     } 
} 

這些將控制轉移到@controlleradvice。

+0

你能解釋一下你在這裏做什麼嗎?這是如何將控制權交給ControllerAdvice的其中一個類的? –

-1

我注意到這已經被留下了一個月左右,所以它可能是舊的。但是這篇文章可能會幫助http://www.baeldung.com/2013/01/31/exception-handling-for-rest-with-spring-3-2/

第3.5節可能是您正在尋找的自定義異常解析器。

+0

謝謝你的答案,但我解決了它的方面,使所有的例外將拋出一個地方。 –

+0

我認爲這並不能解釋如何在同一個Spring App中爲REST API和HTML頁面進行異常處理。 -1 –