在SpringMVC中統一處理異常

2021-10-07 18:00:18 字數 2032 閱讀 2159

在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...