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

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

軟件測(cè)試 | Spring Boot異常處理

2023-06-11 16:19 作者:愛測(cè)軟件測(cè)試  | 我要投稿

異常處理簡(jiǎn)介

  • Java 異常類

說(shuō)到異常處理,我們都知道使用 try-catch 可以捕捉異常,可以 throws 拋出異常。那么在 Spring Boot 中我們?nèi)绾翁幚懋惓#绾胃鼉?yōu)雅的處理異常,如何全局處理異常。是本章討論解決的問題。 首先讓我們簡(jiǎn)單了解或重新學(xué)習(xí)下 Java 的異常機(jī)制。

Java 內(nèi)部的異常類 Throwable 包括了 Exception 和 Error 兩大類,所有的異常類都是 Object 對(duì)象。 Error 是不可捕捉的異常,通俗的說(shuō)就是由于 Java 內(nèi)部 JVM 引起的不可預(yù)見的異常, Java 虛擬機(jī)會(huì) 選擇終止線程。如 OutOfMemoryError ,就是 Java 虛擬機(jī)運(yùn)行過程中出現(xiàn)內(nèi)存資源錯(cuò)誤拋出的。

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

  • Java 異常處理機(jī)制

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

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

捕獲異常:在方法拋出異常之后,運(yùn)行時(shí)系統(tǒng)將轉(zhuǎn)為尋找合適的異常處理器(Exception Handler)。潛 在的異常處理器是異常發(fā)生時(shí)依次存留在調(diào)用棧中的方法的集合。當(dāng)異常處理器能處理的異常類型與方 法拋出的異常類型相符時(shí),即為合適的異常處理器。運(yùn)行時(shí)系統(tǒng)從發(fā)生異常的方法開始,依次回查調(diào)用 棧中的方法,直至找到含有合適異常處理器的方法并執(zhí)行。當(dāng)運(yùn)行時(shí)系統(tǒng)遍歷調(diào)用棧而未找到合適 的異 常處理器,則運(yùn)行時(shí)系統(tǒng)終止。同時(shí),意味著 Java 程序的終止。

  • Spring Boot 異常處理

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

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

在 Web 項(xiàng)目中通過 ControllerAdvice、RestControllerAdvice 實(shí)現(xiàn)全局異常處理 ControllerAdvice 和 RestControllerAdvice 的區(qū)別 相當(dāng)于 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 所指的類型的異常(注意:當(dāng)該 異常的子父類都被聲明時(shí),按照先子后父的順序進(jìn)行捕獲)

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

添加模擬異常接口

  • HogwartsTestUserController.java

在 HogwartsTestUserController.java 新增一個(gè) error 接口

/** * 模擬拋出異常 * */ @GetMapping("/error") public Object err(){ throw new RuntimeException("拋出一個(gè)異常"); }

使用 POSTMAN 進(jìn)行測(cè)試

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

{ "id": 3, "name": "HogwartsTest2", "pwd": "HogwartsTest2" }

GET?127.0.0.1:8081/api/user?拋出異常,并給出提示信息

{ "msg": "拋出一個(gè)異常", "status": -1 }


軟件測(cè)試 | Spring Boot異常處理的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
盐池县| 武宁县| 溆浦县| 东阳市| 阿图什市| 沈阳市| 泸定县| 西畴县| 集安市| 营山县| 北海市| 苍梧县| 台东县| 嘉荫县| 承德市| 桦甸市| 栾城县| 津南区| 天津市| 平邑县| 邻水| 永靖县| 吉木乃县| 上高县| 勐海县| 漾濞| 玉龙| 稷山县| 中卫市| 鲁山县| 广水市| 陆丰市| 铜梁县| 万山特区| 景东| 崇文区| 临沂市| 元朗区| 壤塘县| 定远县| 喀喇沁旗|