如何優(yōu)雅的拋出Spring Boot注解的異常詳解
前言
Spring Boot它簡(jiǎn)化了配置,內(nèi)嵌式tomcat容器,用于快速開發(fā)基于Spring的應(yīng)用,是一個(gè)微框架,本文主要介紹的是關(guān)于如何優(yōu)雅的拋出Spring Boot注解的異常的相關(guān)內(nèi)容,下面話不多說了,來一起看看詳細(xì)的介紹吧
平時(shí)我們?cè)趯懘a的時(shí)候肯定要進(jìn)行很多參數(shù)驗(yàn)證,最開始的時(shí)候我們一般都是這樣處理的 如下圖
看起來好像也沒什么,但是 如果參數(shù)多了呢?你就會(huì)看到這樣的校驗(yàn)
OMG?。。?有沒有感覺稍微有點(diǎn)視覺沖擊,雖然這樣寫的已經(jīng)很規(guī)整了,但是還是不夠簡(jiǎn)單和優(yōu)雅。
在SpringBoot中,我們可以直接對(duì)對(duì)象加上@vaild進(jìn)行參數(shù)校驗(yàn)
這樣寫是不是看起來優(yōu)雅了很多,沒錯(cuò)!我們就是要追求這種 小即美 的感覺?。。。。?/p>
雖然這樣看起來優(yōu)雅了很多,但是 還有點(diǎn)問題
當(dāng)我們進(jìn)行參數(shù)校驗(yàn)的時(shí)候 會(huì)看到
OMG的! 這一長(zhǎng)串又蹦出來了,在頁(yè)面上彈出來很丑,而且提示不夠明確
為什么就不能彈出來message里面的內(nèi)容呢???
顯然 是可以的,不過 這個(gè)設(shè)計(jì)注解的人想給后臺(tái)更多提示,拋出了更詳細(xì)的內(nèi)容,實(shí)在是丑了點(diǎn)。
于是為了不寫那么丑的代碼,我改造了一些網(wǎng)上的代碼
@ControllerAdvice public class ExceptionHandle { @ExceptionHandler(value = RuntimeException.class) @ResponseBody public String handle(RuntimeException e) { if (e instanceof RuntimeException) { RuntimeException exception = e; return exception.getMessage(); } else { return "未知錯(cuò)誤"; } } public void exceptionMessage(BindingResult bindingResult) throws SeeingException { if (bindingResult.hasErrors()) { String msg = bindingResult.getFieldError().getDefaultMessage(); throw new SeeingException(ErrorCode.BUSINESS_EXCEPTION, msg); } } }
通過上面簡(jiǎn)單的幾行代碼我們就可以直接拿到
另外兩個(gè)參數(shù)是公司框架里面的內(nèi)容,大家可以忽略
這時(shí)候只剩下了message里面的內(nèi)容,不過在使用的時(shí)候 需要調(diào)用下exceptionMessage方法
還是有些麻煩的,我的想法是可以自定義一個(gè)注解,把這部分代碼整合進(jìn)去,有興趣的可以去試下。
不過我們終于還是達(dá)到了目標(biāo)不是。
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問大家可以留言交流,謝謝大家對(duì)腳本之家的支持。
- SpringMvc @Valid如何拋出攔截異常
- springboot springmvc拋出全局異常的解決方法
- 解決spring @ControllerAdvice處理異常無法正確匹配自定義異常
- Spring Boot集成Druid出現(xiàn)異常報(bào)錯(cuò)的原因及解決
- SpringBoot2 JPA解決懶加載異常的問題
- Spring Boot Maven Plugin打包異常解決方案
- Springboot異常錯(cuò)誤處理解決方案詳解
- spring配置文件解析失敗報(bào)”cvc-elt.1: 找不到元素 ''''beans'''' 的聲明”異常解決
- Spring應(yīng)用拋出NoUniqueBeanDefinitionException異常的解決方案
相關(guān)文章
解決Druid動(dòng)態(tài)數(shù)據(jù)源配置重復(fù)刷錯(cuò)誤日志的問題
使用druid數(shù)據(jù)庫(kù)連接池實(shí)現(xiàn)動(dòng)態(tài)的配置數(shù)據(jù)源功能,在配置過程中出現(xiàn)一個(gè)問題既然是用戶自己配置的數(shù)據(jù)源,就無法避免輸入錯(cuò)誤,連接失敗等情況,關(guān)于這個(gè)問題怎么處理呢,今天小編通過本文給大家詳細(xì)說明下,感興趣的朋友一起看看吧2021-05-05SpringBoot中創(chuàng)建的AOP不生效的原因及解決
這篇文章主要介紹了SpringBoot中創(chuàng)建的AOP不生效的原因及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-11-11解決Springboot全局異常處理與AOP日志處理中@AfterThrowing失效問題
這篇文章主要介紹了解決Springboot全局異常處理與AOP日志處理中@AfterThrowing失效問題,文中介紹了兩種失效場(chǎng)景,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧2023-05-05Java中的ArrayList.trimToSize()方法詳解
這篇文章主要介紹了Java中的ArrayList.trimToSize()方法詳解,前幾天看了Java?ArrayList,沒有明白trimToSize()這個(gè)方法是什么意思,所以看了一下源碼并且debug一下自己的一個(gè)例子,明白了其中的含義,需要的朋友可以參考下2023-11-11Java兩種方法計(jì)算出階乘尾部連續(xù)0的個(gè)數(shù)
這篇文章主要介紹了Java兩種方法計(jì)算出階乘尾部連續(xù)0的個(gè)數(shù),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03MybatisPlus 多租戶架構(gòu)(Multi-tenancy)實(shí)現(xiàn)詳解
這篇文章主要介紹了MybatisPlus 多租戶架構(gòu)(Multi-tenancy)實(shí)現(xiàn)詳解,詳細(xì)的介紹了什么是多租戶架構(gòu)以及使用MybatisPlus實(shí)現(xiàn),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-11-11play for scala 實(shí)現(xiàn)SessionFilter 過濾未登錄用戶跳轉(zhuǎn)到登錄頁(yè)面
這篇文章主要介紹了play for scala 實(shí)現(xiàn)SessionFilter 過濾未登錄用戶跳轉(zhuǎn)到登錄頁(yè)面的相關(guān)資料,需要的朋友可以參考下2016-11-11Java使用HttpUtils實(shí)現(xiàn)發(fā)送HTTP請(qǐng)求
這篇文章主要介紹了Java使用HttpUtils實(shí)現(xiàn)發(fā)送HTTP請(qǐng)求,HTTP請(qǐng)求,在日常開發(fā)中,還是比較常見的,今天給大家分享HttpUtils如何使用,需要的朋友可以參考下2023-05-05