在springmvc中,允許開發人員自定義方法,用於統一處理異常,以至於某些異常可能在多種處理請求的過程中都可能出現,但是,只需要編寫1次處理的**即可!
該機制的核心在於:可能出現異常的、處理請求的方法,並不通過**顯式的處理異常!則等同於這些處理請求的方法會將異常丟擲,而springmvc框架在呼叫這些處理請求的方法時,會捕獲這些異常,此時,如果開發人員自定義了處理異常的方法,則springmvc會在捕獲到異常之後,呼叫處理異常的方法。
關於統一處理異常的方法,其宣告原則:
例如,可以設計為:
@exceptionhandler
public jsonresult
aaaaa
(throwable e)
else
if(e instanceof
insertexception
)else
return jsonresult;
}
注意:當統一處理異常的**在某個控制器類的內部時,只能作用於當前控制器類中丟擲的異常!
如果需要統一處理異常的**能夠處理所有控制器類中的異常,可選的解決方法有:
例如,採取以上第2種做法時,**示例:
package cn.tedu.store.controller;
@restcontrolleradvice
public
class
globalexceptionhandler
else
if(e instanceof
insertexception
)else
return jsonresult;
}}
以上使用到的@exceptionhandler
註解的源**:
@target
(elementtype.method)
@retention
(retentionpolicy.runtime)
@documented
public @inte***ce
exceptionhandler
;}
註解中的value
屬性是異常型別的陣列,其作用是:被新增註解的方法處理的異常的種類,如果該屬性值為空,將對應處理異常的方法的引數列表中所有異常!
也就是說,如果**是:
@exceptionhandler
public jsonresult
handleexception
(throwable e)
則表示handleexception()
將處理throwable
型別的異常!
如果**是:
@exceptionhandler
public jsonresult
handleexception
(runtimeexception e)
則表示handleexception()
將處理runtimeexception
型別的異常,而其它型別的,例如ioexception
等異常將不會被該方法處理!
如果在乙個專案中,多種不同的異常有不同的處理方式,可以建立多個處理異常的方法,並且,通過方法的引數或配置@exceptionhandler
註解的引數,來指定需要被處理的異常的種類。
@exceptionhandler()
public jsonresult
handleexception
(throwable e)
或:
@exceptionhandler()
public jsonresult
handleexception
(throwable e)
SpringMVC異常統一處理
正文 spring 統一異常處理有 3 種方式,分別為 使用 exceptionhandler 註解 實現 handlerexceptionresolver 介面 使用 controlleradvice 註解 package com.tao.smp.exception api統一的返回結果類 pub...
springmvc異常統一處理(一)
目錄 正文 spring 統一異常處理有 3 種方式,分別為 使用 exceptionhandler 註解 實現 handlerexceptionresolver 介面 使用 controlleradvice 註解 使用該註解有乙個不好的地方就是 進行異常處理的方法必須與出錯的方法在同乙個contr...
SpringMVC 全域性異常統一處理
使用 exceptionhandler 註解 實現 handlerexceptionresolver 介面 使用 controlleradvice 註解 當以上三個方式,一起出現時,只執行執行範圍最小的方式,後面的方式不再執行處理 執行範圍 exceptionhandler controllerad...