最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

技術(shù)分享 | Spring Boot 異常處理

2022-10-24 10:39 作者:愛測軟件測試  | 我要投稿
  • Java 異常類
    首先讓我們簡單了解或重新學(xué)習(xí)下 Java 的異常機制。

Java 內(nèi)部的異常類 Throwable 包括了 Exception 和 Error 兩大類,所有的異常類都是 Object 對象。

Error 是不可捕捉的異常,通俗的說就是由于 Java 內(nèi)部 JVM 引起的不可預(yù)見的異常, Java 虛擬機會選擇終止線程。如 OutOfMemoryError ,就是 Java 虛擬機運行過程中出現(xiàn)內(nèi)存資源錯誤拋出的。

Excetpion 異常是程序本身引起的,它又分為運行時異常 RuntimeException,和非運行時(編譯時)IOException 等異常。如除數(shù)為零時引發(fā)的 ArrayIndexOutOfBoundException 異常就是運行時異常。非運行異常都是可查可捕捉的。Java 編譯器會告訴程序他錯了,錯在哪里,正確的建議什么。我們可以通過 throws 配合 try-catch 來處理。

  • Java 異常處理機制
    在 Java 應(yīng)用程序中,異常處理機制為:拋出異常,捕捉異常。

拋出異常:當一個方法出現(xiàn)錯誤引發(fā)異常時,方法創(chuàng)建異常對象并交付運行時系統(tǒng),異常對象中包含異常類型和出現(xiàn)異常時的程序運行時信息。運行時系統(tǒng)負責尋找處置異常的代碼并執(zhí)行。

捕獲異常:在方法拋出異常之后,運行時系統(tǒng)將轉(zhuǎn)為尋找合適的異常處理器(Exception Handler)。潛在的異常處理器是異常發(fā)生時依次存留在調(diào)用棧中的方法的集合。

當異常處理器能處理的異常類型與方法拋出的異常類型相符時,即為合適的異常處理器。運行時系統(tǒng)從發(fā)生異常的方法開始,依次回查調(diào)用棧中的方法,直至找到含有合適異常處理器的方法并執(zhí)行。
當運行時系統(tǒng)遍歷調(diào)用棧而未找到合適 的異常處理器,則運行時系統(tǒng)終止。同時,意味著 Java 程序的終止。

  • Spring Boot 異常處理
    Spring Boot 的所有異常處理都基于 java 的。

在 Spring Boot 應(yīng)用程序中,通常統(tǒng)一處理異常的方法有 使用注解處理 RestControllerAdvice
本示例主要目的處理我們?nèi)粘?Spring Boot 中的異常處理

在 Web 項目中通過 ControllerAdvice、RestControllerAdvice 實現(xiàn)全局異常處理

ControllerAdvice 和 RestControllerAdvice 的區(qū)別 相當于 Controller 和 RestController 的區(qū)別。

代碼示例

  • GlobalExceptionHandler.java

import org.springframework.http.HttpStatus;?

import org.springframework.web.bind.annotation.*; import java.util.HashMap;

import java.util.Map;

@RestControllerAdvice?

public class GlobalExceptionHandler { ? ?@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR) ? ?@ExceptionHandler({Exception.class})?

? ?public Object exceptionHandler(Exception e){ ? ?

?? ?Map<String,Object> map=new HashMap<>(); ? ?

? ?map.put("status",-1); ? ? ??

?map.put("msg",e.getLocalizedMessage());?

?? ? ? ?return map; ? ?

}?

}

  • 配置介紹
    RestControllerAdvice:全局捕獲異常,異常集中處理,更好的使業(yè)務(wù)邏輯與異常處理剝離開,定義在類上

ExceptionHandler:統(tǒng)一處理某一類異常,聲明該方法用于捕獲 value 所指的類型的異常(注意:當該異常的子父類都被聲明時,按照先子后父的順序進行捕獲)

ResponseStatus:將某種異常映射為 HTTP 狀態(tài)碼,可用在方法上,也可以用在類上(自定義運行時異常類)。

  • HogwartsTestUserController.java
    在 HogwartsTestUserController.java 新增一個 error 接口

/** ?

?? * 模擬拋出異常 ? ?

* */ ?

??@GetMapping("/error") ?

??public Object err(){ ? ??

? ?throw new RuntimeException("拋出一個異常");? ??

}

GET?127.0.0.1:8081/api/user?正常返回

{ ?

??"id": 3,

? ?"name": "HogwartsTest2", ? ?

"pwd": "HogwartsTest2" }

GET?127.0.0.1:8081/api/user?拋出異常,并給出提示信息
{ “msg”: “拋出一個異?!? “status”: -1 }


技術(shù)分享 | Spring Boot 異常處理的評論 (共 條)

分享到微博請遵守國家法律
衡南县| 泉州市| 东源县| 景东| 蓬溪县| 通辽市| 许昌市| 鄱阳县| 布尔津县| 慈利县| 磴口县| 佛山市| 新竹市| 广东省| 崇左市| 阳江市| 类乌齐县| 蕉岭县| 永兴县| 宝丰县| 西吉县| 信阳市| 台中县| 苗栗县| 塔城市| 通辽市| 赤城县| 兴山县| 泰宁县| 探索| 绥滨县| 屯门区| 沙田区| 象州县| 方山县| 闵行区| 德阳市| 荃湾区| 长子县| 南汇区| 恭城|