Spring?Boot的幾種統(tǒng)一處理方式梳理小結(jié)
正文
為了程序返回數(shù)據(jù)友好,返回給前端的數(shù)據(jù)信息是可讀的,往往會考慮將異常進(jìn)行封裝或者組織為結(jié)構(gòu)化返回。
基于 Spring Boot 體系,原本已經(jīng)提供了一些方式實現(xiàn),我們今天主要聊的也是基于 Spring Boot 去解決上述問題。
@ExceptionHandler
@ExceptionHandler 可以作為統(tǒng)一攔截異常方式,對于指定的異常按照你想的方式自由組裝返回的數(shù)據(jù)信息和結(jié)構(gòu)。自由度很高,這里需要注意的一點,往往大家會在這里就直接通過response對象返回響應(yīng)結(jié)果,從而導(dǎo)致ResponseBodyAdvice、HandlerInterceptor之類的后續(xù)處理不再觸發(fā)。 所以在使用該方式時,盡可能不直接使用response.write方式返回,而是使用統(tǒng)一的數(shù)據(jù)結(jié)構(gòu)作為處理返回值。
// 推薦
@ResponseStatus(value = HttpStatus.OK)
@ExceptionHandler(value = ConstraintViolationException.class)
@ResponseBody
public Resp<Void> onBadMethodArgumentTypeMismatchException(ConstraintViolationException e) {
return Resp.badRequest(e.getConstraintViolations().stream().findFirst().get().getMessage());
}
// 不推薦
@ExceptionHandler(Exception.class)
public void exception(Exception e, HttpServletResponse response) throws IOException {
response.setContentType("application/json;charset=UTF-8");
log.error("系統(tǒng)異常:", e);
response.getWriter().write($.json.toJsonString(Resp.customize(RpcResult.SERVER_ERROR, "服務(wù)器異常,請稍后再試"));
}ErrorController
Spring Boot 在發(fā)生異常的時候,如果沒有異常捕捉器存在,會默認(rèn)調(diào)用/error接口(可以通過server.error.path修改),類似寫接口一樣,對異常進(jìn)行捕捉處理。
該方式優(yōu)先級上會弱一點,但也是一種好方式,還可以自己實現(xiàn)通過配置方式處理異常,可以參考:Dew。
課外拓展
執(zhí)行優(yōu)先級說明
1、HandlerInterceptor.preHandle() 2、 業(yè)務(wù)方法 3、@ExceptionHandler 4、ResponseBodyAdvice.supports() 5、ResponseBodyAdvice.beforeBodyWrite() 6、HandlerInterceptor.postHandle() 7、HandlerInterceptor.afterCompletion()
以上就是Spring Boot的幾種統(tǒng)一處理方式梳理小結(jié)的詳細(xì)內(nèi)容,更多關(guān)于Spring Boot統(tǒng)一處理的資料請關(guān)注腳本之家其它相關(guān)文章!
- SpringBoot統(tǒng)一接口返回及全局異常處理高級用法
- SpringBoot返回結(jié)果統(tǒng)一處理實例詳解
- SpringBoot實現(xiàn)接口統(tǒng)一前綴
- Springboot中@Async異步,實現(xiàn)異步結(jié)果合并統(tǒng)一返回方式
- SpringBoot統(tǒng)一返回處理出現(xiàn)cannot?be?cast?to?java.lang.String異常解決
- SpringBoot使用AOP實現(xiàn)統(tǒng)一角色權(quán)限校驗
- Spring?Boot項目完美大一統(tǒng)(結(jié)果異常日志統(tǒng)一)
相關(guān)文章
Java ArrayList.add 的實現(xiàn)方法
這篇文章主要介紹了Java ArrayList.add 的實現(xiàn)方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-11-11
springboot+maven快速構(gòu)建項目的示例代碼
本篇文章主要介紹了springboot+maven快速構(gòu)建項目的示例代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-08-08
idea的終端(Terminal)cmd的命令換成linux的命令詳解
本文介紹IDEA配置Git的步驟:安裝Git、修改終端設(shè)置并重啟IDEA,強(qiáng)調(diào)順序,作為個人經(jīng)驗分享,希望提供參考并支持腳本之家2025-07-07
ImportBeanDefinitionRegistrar手動控制BeanDefinition創(chuàng)建注冊詳解
這篇文章主要為大家介紹了ImportBeanDefinitionRegistrar手動控制BeanDefinition創(chuàng)建注冊詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-12-12
java計算兩個日期之前的天數(shù)實例(排除節(jié)假日和周末)
下面小編就為大家?guī)硪黄猨ava計算兩個日期之前的天數(shù)實例(排除節(jié)假日和周末)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-07-07
IntelliJ IDEA 下載安裝超詳細(xì)教程(推薦)
這篇文章主要介紹了IntelliJ IDEA 下載安裝超詳細(xì)教程(推薦),本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-02-02
Apache?Commons?Imaging處理圖像實例深究
這篇文章主要為大家介紹了Apache?Commons?Imaging處理圖像的實例探索深究,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-12-12
java 數(shù)據(jù)庫連接與增刪改查操作實例詳解
這篇文章主要介紹了java 數(shù)據(jù)庫連接與增刪改查操作,結(jié)合實例形式詳細(xì)分析了java使用jdbc進(jìn)行數(shù)據(jù)庫連接及增刪改查等相關(guān)操作實現(xiàn)技巧與注意事項,需要的朋友可以參考下2019-11-11

