最近在做一個練手的小項目,
系統架構中用了springmvc的全局異常處理器,
做了系統的統一異常處理。
后來加入了springmvc的攔截器,
為了一些需求,
在攔截器中的 preHandle 方法 中拋出了系統自定義異常,
當時有有個疑惑,
就是拋出的這個異常全局異常處理器怎么處理的。
這里的全局異常處理器時通過實現HandlerExceptionResolver這個接口實現的
要指出的是 resolveException方法 中 handler中代表的是什么,我沒遇到這個問題之前我認為這玩意可以強轉成 HandlerMethod 對象 ,然后這個對象 獲取 Method對象
1 Method method = handlerMethod.getMethod();
然后這個 method 是系統中拋出異常的方法。
這樣理解是不正確的。
如果是這樣的話,那么我在攔截器中拋出異常的話,那么這個method應該是 preHandle,
下面做了一個實驗,
在攔截器中拋出了異常,
雖然是攔截器中拋出的異常,這里解析出來的method還是目標handler中的方法,
我之前理解的這個method是任何拋出異常的方法。
事實證明,理解錯了。