Spring 中異常處理的各種姿勢

2021-09-29 20:48:26 字數 2121 閱讀 5070

統一的異常處理對於應用的重要性不言而喻。今天我們來介紹一下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...