Spring?Boot的幾種統(tǒng)一處理方式梳理小結(jié)
正文
為了程序返回數(shù)據(jù)友好,返回給前端的數(shù)據(jù)信息是可讀的,往往會考慮將異常進行封裝或者組織為結(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修改),類似寫接口一樣,對異常進行捕捉處理。
該方式優(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使用ProcessBuilder?API優(yōu)化流程
Java?的?Process?API?為開發(fā)者提供了執(zhí)行操作系統(tǒng)命令的強大功能,這篇文章將詳細(xì)介紹如何使用?ProcessBuilder?API?來方便的操作系統(tǒng)命令,需要的可以收藏一下2023-06-06Idea 同一窗口導(dǎo)入多個項目的實現(xiàn)步驟
本文主要介紹了Idea 同一窗口導(dǎo)入多個項目的實現(xiàn)步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-07-07Spring-Cloud Eureka注冊中心實現(xiàn)高可用搭建
這篇文章主要介紹了Spring-Cloud Eureka注冊中心實現(xiàn)高可用搭建,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-04-045分鐘快速學(xué)會spring boot整合JdbcTemplate的方法
這篇文章主要給大家介紹了如何通過5分鐘快速學(xué)會spring boot整合JdbcTemplate的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用spring boot整合JdbcTemplate具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12Java攔截過濾器模式 (Intercepting Filter )實現(xiàn)方法
攔截過濾器模式(Intercepting Filter Pattern)用于對應(yīng)用程序的請求或響應(yīng)做一些預(yù)處理/后處理,本文通過實例代碼介紹Java攔截過濾器模式 (Intercepting Filter )的相關(guān)知識,感興趣的朋友跟隨小編一起看看吧2024-03-03spring設(shè)置定時任務(wù)方式(@Scheduled)
這篇文章主要介紹了spring設(shè)置定時任務(wù)方式(@Scheduled),具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-04-04SpringBoot使用自動配置xxxAutoConfiguration
這篇文章介紹了SpringBoot自動配置xxxAutoConfiguration的使用方法,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-12-12