3 回答

TA貢獻1876條經驗 獲得超7個贊
這是人們期望Spring MVC表現的方式嗎?
從Spring 4.3.7開始,Spring MVC的行為如下:它使用HandlerExceptionResolver實例來處理由處理程序方法引發的異常。
默認情況下,Web MVC配置注冊一個HandlerExceptionResolverbean HandlerExceptionResolverComposite,即
委托其他名單HandlerExceptionResolvers。
那些其他解析器是
ExceptionHandlerExceptionResolver
ResponseStatusExceptionResolver
DefaultHandlerExceptionResolver
以該順序注冊。出于這個問題的目的,我們只關心ExceptionHandlerExceptionResolver。
一AbstractHandlerMethodExceptionResolver,通過解析異常@ExceptionHandler的方法。
在上下文初始化時,Spring將為它檢測到的ControllerAdviceBean每個帶@ControllerAdvice注釋的類生成一個。該ExceptionHandlerExceptionResolver會從上下文檢索這些,并使用排序,使用AnnotationAwareOrderComparator其
是對擴展的OrderComparator支持,它支持Spring的Ordered 接口以及@Order和@Priority批注,并由Ordered實例提供的訂單值覆蓋靜態定義的批注值(如果有)。
然后,ExceptionHandlerMethodResolver將為每個這些ControllerAdviceBean實例注冊一個(將可用@ExceptionHandler方法映射到它們打算處理的異常類型)。最后,將它們以相同的順序添加到中LinkedHashMap(保留迭代順序)。
當發生異常時,ExceptionHandlerExceptionResolver會遍歷這些異常ExceptionHandlerMethodResolver并使用可以處理異常的第一個異常。
因此,這里的一點是:如果你有一個@ControllerAdvice帶有@ExceptionHandler用于Exception該被另一注冊前@ControllerAdvice與類@ExceptionHandler的更具體的例外,比如IOException,是第一個將被調用。如前所述,您可以通過@ControllerAdvice實現Ordered帶注釋的類或用@Order或對其進行注釋@Priority并為其指定適當的值來控制該注冊順序。

TA貢獻1856條經驗 獲得超17個贊
這是人們期望Spring MVC表現的方式嗎?
從Spring 4.3.7開始,Spring MVC的行為如下:它使用HandlerExceptionResolver實例來處理由處理程序方法引發的異常。
默認情況下,Web MVC配置注冊一個HandlerExceptionResolverbean HandlerExceptionResolverComposite,即
委托其他名單HandlerExceptionResolvers。
那些其他解析器是
ExceptionHandlerExceptionResolver
ResponseStatusExceptionResolver
DefaultHandlerExceptionResolver
以該順序注冊。出于這個問題的目的,我們只關心ExceptionHandlerExceptionResolver。
一AbstractHandlerMethodExceptionResolver,通過解析異常@ExceptionHandler的方法。
在上下文初始化時,Spring將為它檢測到的ControllerAdviceBean每個帶@ControllerAdvice注釋的類生成一個。該ExceptionHandlerExceptionResolver會從上下文檢索這些,并使用排序,使用AnnotationAwareOrderComparator其
是對擴展的OrderComparator支持,它支持Spring的Ordered 接口以及@Order和@Priority批注,并由Ordered實例提供的訂單值覆蓋靜態定義的批注值(如果有)。
然后,ExceptionHandlerMethodResolver將為每個這些ControllerAdviceBean實例注冊一個(將可用@ExceptionHandler方法映射到它們打算處理的異常類型)。最后,將它們以相同的順序添加到中LinkedHashMap(保留迭代順序)。
當發生異常時,ExceptionHandlerExceptionResolver會遍歷這些異常ExceptionHandlerMethodResolver并使用可以處理異常的第一個異常。
因此,這里的一點是:如果你有一個@ControllerAdvice帶有@ExceptionHandler用于Exception該被另一注冊前@ControllerAdvice與類@ExceptionHandler的更具體的例外,比如IOException,是第一個將被調用。如前所述,您可以通過@ControllerAdvice實現Ordered帶注釋的類或用@Order或對其進行注釋@Priority并為其指定適當的值來控制該注冊順序。
- 3 回答
- 0 關注
- 891 瀏覽
添加回答
舉報