統一的異常處理對於應用的重要性不言而喻。今天我們來介紹一下spring如何來進行統一的rest異常處理。同時我們也會簡單比較一下它們之間的優劣。
在控制器中宣告乙個方法然後用@exceptionhandler
註解標記即可:
@controller
public class testcontroller
@exceptionhandler()
public modelandview fix(exception ex)
}複製**
優點:
缺點:這是2.的改進型,通過定義@controlleradvice
類並在方法上標記@exceptionhandler
,達到了全域性異常處理的目的:
@controlleradvice
public class testcontroller )
public modelandview fix(exception ex)
}複製**
優點:
缺點:一般情況下也建議使用該方式進行異常處理。大多數情況下都是相容的。
實現handlerexceptionresolver
介面,這裡我們繼承其抽象實現abstracthandlerexceptionresolver
:
}複製**優點:
缺點:如果你用的框架是spring boot。 我們還可以用它獨特的處理方式。優點是遮蔽了低階的api,缺點也比較明顯,無法捕捉到具體的異常。
spring boot在預設情況下,提供了/error
對映來處理所有錯誤,在servlet容器裡註冊了全域性的錯誤頁面(whitelabel error page)並返回客戶端。通過實現errorcontroller介面並註冊為bean。這裡不再舉例。可參考basicerrorcontroller
。
我們也可以新增errorattributes型別的bean來替換替換預設的異常處理。
@component
public class mycustomerrorattributes extends defaulterrorattributes
}複製**
@component
}複製**
另外在最新的spring 5中你還可以通過 丟擲responsestatu***ception
異常來進行處理。
好處:缺點:
我們對常用的、不常用的spring處理異常的方式進行了總結和優劣上的分析。 相信你可以從中找到適合你的處理方式。如果對你有用請幫忙點乙個贊,您的鼓勵,我的動力!
SpringBoot 處理異常的幾種常見姿勢
新建異常資訊實體類 非必要的類,主要用於包裝異常資訊。public class errorresponse public errorresponse string errortypename,string message 省略getter setter方法 自定義異常型別 一般我們處理的都是 run...
Spring中全域性異常處理
1 首先我們編寫乙個全域性異常處理的類exceptionhandle,然後再類上加上註解 controlleradvice controlleradvice可以選擇要處理異常的包例如 controlleradvice com.ldd.controlleradvice還可以處理某些註解丟擲的異常例如 ...
Spring 異常處理
今天在做專案的時候突然發現異常處理還有所欠缺,所有打算好好的加強一下異常的處理,順便好好鞏固以前學習的知識和增加新的知識。實現spring介面 handlerexceptionresolver public class exceptionresolver implements handlerexce...