SpringBoot全域性異常處理

2021-10-21 19:22:24 字數 1806 閱讀 5474

在最近的專案中有這樣的乙個需求,專案整合slf4j+logback處理日誌,在原來的專案中針對異常都是使用的try{}catch(){}來處理的,如果需要將異常資訊輸出到日誌檔案中就需要在沒個catch中將異常資訊輸出到日誌檔案,這樣會顯得**十分的臃腫,而且可維護性很差,如果有一天我們需要將所有的異常日誌更換的話那我們就得去每個地方都改一下,這樣不僅工作量大、耗時,還有可能會有遺漏的地方。針對這個問題,我們可以使用springboot的全域性異常來處理我們專案中的異常資訊,具體**如下:

@controlleradvice

public

class

globalexceptionhandler

}

@controlleradvice,是spring3.2提供的新註解,從名字上可以看出大體意思是控制器增強,下面我們來看看他的具體實現:

@target()

@retention

(retentionpolicy.

runtime

)@documented

@component

public @inte***ce

controlleradvice

; @aliasfor

("value"

) string[

]basepackages()

default

; class<

?>

basepackageclasses()

default

; class<

?>

assignabletypes()

default

; class<

?extends

annotation

>

annotations()

default

;}

通過@controlleradvice的具體實現類我們可以看到它是乙個component,因此也會被當成組建掃瞄,一視同仁,掃掃掃。

@component專門用於宣告@exceptionhandler , @initbinder或@modelattribute方法要在多個@controller類之間共享的類。

帶有@controlleradvice類可以顯式宣告為spring bean,或通過類路徑掃瞄自動檢測。 所有此類bean均通過annotationawareordercomparator進行排序,即基於@order和ordered ,並在執行時以該順序應用。 為了處理異常,將在第乙個建議中使用匹配的異常處理程式方法選擇@exceptionhandler 。 對於模型的屬性和initbinder初始化, @modelattribute和@initbinder方法也將遵循@controlleradvice秩序。

注意:對於@exceptionhandler方法,在特定建議bean的處理程式方法中,與僅匹配導致當前異常的原因相比,將首選與根異常匹配。 但是,與優先順序較低的建議bean上的任何匹配項(根或原因級別)相比,優先順序較高的建議上的原因匹配仍將是首選的。 因此,請在具有相應順序的優先通知bean上宣告您的主根異常對映!

預設情況下, @controlleradvice controlleradvice中的方法全域性應用於所有controller。 使用選擇器annotations() , basepackageclasses()和basepackages() (或其別名value() )來定義目標控制器的更窄子集。 如果宣告了多個選擇器,則將應用or邏輯,這意味著選定的控制器應至少匹配乙個選擇器。 請注意,選擇器檢查是在執行時執行的,因此新增許多選擇器可能會對效能產生負面影響並增加複雜性。

全域性異常處理 springBoot 全域性異常處理

先讚後看,月入百萬 springboot開發的web專案中,強調分層的概念,乙個完整的專案一般會劃分出controller層和service層。因此,為了 的可維護性,controller層 應該盡量簡潔,驗證一下引數,直接丟給service層處理即可 異常處理的方式無外乎兩種 在springboo...

springboot全域性異常捕獲

新專案中需要用到檔案上傳,有需要對上傳檔案大小進行限制,當檔案超過限制的時候,springboot框架會直接丟擲異常,不會進入你的方法中,當我們需要向前臺返回資訊的時候也無從返回,只能進行全域性捕獲檔案過大的異常,然後再返回資訊。controlleradvice public class mycon...

SpringBoot全域性異常處理

簡介通常在controller層需要去捕獲service層的異常,防止返回一些不友好的錯誤資訊到客戶端,但如果controller層每個方法都用模組化的try catch 去捕獲異常,會很難看也難維護,所以使用全域性異常比較方便 這方法是springboot封裝好了的,我們直接使用即可,普通的配置我...