SpringBoot 2 統(tǒng)一異常處理過程解析
統(tǒng)一異常處理相關(guān)注解介紹
@ControllerAdvice
聲明在類上用于指定該類為控制增強(qiáng)器類,如果想聲明返回的結(jié)果為 RESTFull 風(fēng)格的數(shù)據(jù),需要在聲明 @ExceptionHandler 注解的方法上同時(shí)加 上 @ResponseBody
@RestControllerAdvice
聲明在類上用于指定該類為控制增強(qiáng)器類。并聲明返回的結(jié)果為 RESTFull 風(fēng)格的數(shù)據(jù),無需在聲明@ExceptionHandler 注解的方法上加@ResponseBody
@ExceptionHandler
聲明在方法上用于指定需要統(tǒng)一攔截的異常。例如:@ExceptionHandler(value = Exception.class)
實(shí)戰(zhàn)操作
定義消息類:
定義 RESTFull 返回 JSON 數(shù)據(jù)的消息類,其中包含成員變量如下:
- code:錯(cuò)誤碼,0表示沒有異常信息。
- message:異常提示信息。
- date:無異常是返回具體內(nèi)容信息。
public class ReturnMessage<T> { private Integer code;//錯(cuò)誤碼 private String message;//提示信息 private T date;//返回具體內(nèi)容 public ReturnMessage(Integer code, String message, T date) { super(); this.code = code; this.message = message; this.date = date; } //省略get and set方法 }
** 消息類處理工具類:**
主要是用來處理成功或失敗消息處理,該工具類主要包含是3個(gè)方法 :
- 成功處理含實(shí)體數(shù)據(jù)
- 成功處理 沒有實(shí)體數(shù)據(jù)
- 失敗處理
具體代碼如下:
public class ReturnMessageUtil { /** * 無異常 請(qǐng)求成功并有具體內(nèi)容返回 * @param object * @return */ public static ReturnMessage<Object> sucess(Object object) { ReturnMessage<Object> message = new ReturnMessage<Object>(0,"sucess",object); return message; } /** * 無異常 請(qǐng)求成功并無具體內(nèi)容返回 * @return */ public static ReturnMessage<Object> sucess() { ReturnMessage<Object> message = new ReturnMessage<Object>(0,"sucess",null); return message; } /** * 有自定義錯(cuò)誤異常信息 * @param code * @param msg * @return */ public static ReturnMessage<Object> error(Integer code,String msg) { ReturnMessage<Object> message = new ReturnMessage<Object>(code,msg,null); return message; } }
自定義異常類:
我們通過自定義系統(tǒng)異常類來完成校驗(yàn)相關(guān)的操作,自定義系統(tǒng)異常類通過繼承 RuntimeException ,然后聲明名稱為 code 的成員變量來表示不同類型異常。
主要是用于異常攔截后獲取自定義異常的 code ,并將code 設(shè)置到消息類中。
public class SbException extends RuntimeException{ private Integer code; public Integer getCode() { return code; } public void setCode(Integer code) { this.code = code; } public SbException(Integer code,String message) { super(message); this.code = code; } }
定義統(tǒng)一異常攔截類:
通過聲明 @RestControllerAdvice 表示該類為 RESTFul 風(fēng)格的異常處理控制增強(qiáng)器類,在 handle 方法聲明 @ExceptionHandler 并在該注解中指定要攔截的異常類。具體代碼如下:
@RestControllerAdvice public class ExceptionHandle { private final static Logger logger = LoggerFactory.getLogger(ExceptionHandle.class); @ExceptionHandler(value = Exception.class) public ReturnMessage<Object> handle(Exception exception) { if(exception instanceof SbException) { SbException sbexception = (SbException)exception; return ReturnMessageUtil.error(sbexception.getCode(), sbexception.getMessage()); }else { logger.error("系統(tǒng)異常 {}",exception); return ReturnMessageUtil.error(-1, "未知異常"+exception.getMessage()); } } }
測(cè)試
分別測(cè)試自定義異常和系統(tǒng)異常,通過 /error/custome 測(cè)試自定義異常,通過 /error/unknown 測(cè)試未知的系統(tǒng)異常。具體代碼如下:
@RestController @RequestMapping("/error") public class DemoException { @GetMapping(value = "custome") public void customException() { SbException sbe = new SbException(100, "這個(gè)是自定義異常!"); throw sbe; } @GetMapping(value = "unknown") public void unknownException() { int i = 0; int b = 1/i; } }
測(cè)試結(jié)果:
以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
SpringCloud消息總線Bus配置中心實(shí)現(xiàn)過程解析
這篇文章主要介紹了SpringCloud消息總線Bus配置中心實(shí)現(xiàn)過程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-03-03Spring?Cloud?Gateway?服務(wù)網(wǎng)關(guān)的部署與使用詳細(xì)講解
這篇文章主要介紹了Spring?Cloud?Gateway?服務(wù)網(wǎng)關(guān)的部署與使用詳細(xì)介紹,本文給大家講解的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-04-04Idea安裝及涉及springboot詳細(xì)配置的圖文教程
這篇文章主要介紹了Idea安裝及涉及springboot詳細(xì)配置,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-10-10SpringMVC @RequestBody自動(dòng)轉(zhuǎn)json Http415錯(cuò)誤的解決
這篇文章主要介紹了SpringMVC @RequestBody自動(dòng)轉(zhuǎn)json Http415錯(cuò)誤的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-04-04SpringBoot中請(qǐng)求參數(shù)綁定及使用詳解
這篇文章主要介紹了SpringBoot中請(qǐng)求參數(shù)綁定及使用詳解,在Web應(yīng)用程序中,請(qǐng)求參數(shù)綁定是非常重要的操作,Spring?Boot框架使得請(qǐng)求參數(shù)綁定變得非常簡單,通過使用注解和預(yù)定義的類可以輕松地實(shí)現(xiàn)此操作,需要的朋友可以參考下2023-08-08Mybatis批量插入index out of range錯(cuò)誤的解決(較偏的錯(cuò)誤)
這篇文章主要介紹了Mybatis批量插入index out of range錯(cuò)誤的解決(較偏的錯(cuò)誤),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-12-12淺談SpringBoot項(xiàng)目打成war和jar的區(qū)別
這篇文章主要介紹了淺談SpringBoot項(xiàng)目打成war和jar的區(qū)別,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11