JAVA-springboot 異常處理

SpringBoot從入門到精通-第10章 異常處理

一、異常簡介

傳統的Java程序都是由try-catch語句捕捉異常,而Spring Boot項目采用了全局異常類的概念------所有方法均將異常拋出,并且專門安排一個類統一攔截并處理這些異常。這樣做的好處是可以把異常處理的代碼單獨存儲在一個全局異常處理類中。如果未來需要修改異常處理方案,就可以直接在這個全局異常處理類中進行修改。

二、攔截特定異常

為了攔截異常,Spring Boot提供了兩個注解,即@ControllerAdvice和@ExceptionHandler()注解。

  • 其中@ControllerAdvice注解用于標注類,把被@ControllerAdvice注解標注的類稱為全局異常處理類;
  • @ExceptionHandler()注解用于標注方法,把被@ExceptionHandler()注解標注的方法用于處理特定異常。
  • 使用@ControllerAdvice注解和@ExceptionHandler()注解攔截特定異常的語法如下:
@ControllerAdvice
public class TestContro { @ExceptionHandler(被攔截的異常類)public String exce(){}
}

2.1、先創建一個簡單的springboot項目
在這里插入圖片描述
在這里插入圖片描述
編寫控制器類TestContro:

package com.example._2025614spring_exception.controller;import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class TestContro {@RequestMapping("/exception")public String exce(){System.out.println("exce fun");return "exce_fun";}
}

在這里插入圖片描述

2.2、準備創建正常數組訪問的代碼

package com.example._2025614spring_exception.controller;import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import java.util.ArrayList;@RestController
public class TestContro {@RequestMapping("/exception")public String exce(){ArrayList<String> list = new ArrayList<>();list.add("aa");list.add("bb");list.add("cc");System.out.println("list[2]"+list.get(2));System.out.println("exce fun");return "exce_fun";}
}

啟動后訪問,控制臺輸出:
在這里插入圖片描述

2.3、準備創建讓數組訪問超出邊界的代碼

package com.example._2025614spring_exception.controller;import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import java.util.ArrayList;@RestController
public class TestContro {@RequestMapping("/exception")public String exce(){ArrayList<String> list = new ArrayList<>();list.add("aa");list.add("bb");list.add("cc");System.out.println("list[2]"+list.get(2));System.out.println("list[3]"+list.get(3));System.out.println("exce fun");return "exce_fun";}
}

2.4、啟動正常,訪問http://127.0.0.1:8080/exception
在這里插入圖片描述
后臺日志:
在這里插入圖片描述

2.5、添加異常攔截,這時候啟動程序,訪問時沒有報錯打印出來,說明異常被攔截了在這里插入圖片描述

package com.example._2025614spring_exception.controller;import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import java.util.ArrayList;
@ControllerAdvice
//@RestController
public class TestContro {@RequestMapping("/exception")@ExceptionHandler(ArrayIndexOutOfBoundsException.class)public String exce(){ArrayList<String> list = new ArrayList<>();list.add("aa");list.add("bb");list.add("cc");System.out.println("list[2]"+list.get(2));System.out.println("list[3]"+list.get(3));System.out.println("exce fun");return "exce_fun";}}

在這里插入圖片描述
在這里插入圖片描述

三、打印異常日志

添加異常信息打印

package com.example._2025614spring_exception.controller;import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import java.lang.reflect.Array;
import java.util.ArrayList;
@ControllerAdvice
@RestController
public class TestContro {@RequestMapping("/exception")@ExceptionHandler(ArrayIndexOutOfBoundsException.class)public String exce(ArrayIndexOutOfBoundsException e){System.out.println("數組下標越界攔截到了,報錯信息為:"+e);
//        ArrayList<String> list = new ArrayList<>();
//        list.add("aa");
//        list.add("bb");
//        list.add("cc");
//        System.out.println("list[2]"+list.get(2));
//        System.out.println("list[3]"+list.get(3));int[] arr = new int[]{1,2,3,4};System.out.println("arr[1]"+arr[1]);System.out.println("exce fun");return "exce_fun";}
}

訪問:
在這里插入圖片描述
在這里插入圖片描述

四、縮小攔截異常的范圍

4.1、攔截由某個或多個包觸發的異常

@ControllerAdvice({"包名1", "包名2"})
@ControllerAdvice("包名")

4.2、攔截由某個或多個注解標注的類觸發的異常

@ControllerAdvice(annotations={注解1.class, 注解2.class})
@ControllerAdvice(annotations=注解.class)

五、攔截自定義異常

  1. 創建自定義異常類,這個類必須集成RuntimeException運行時異常類,并重寫父類的構造方法。
  2. 創建全局異常類,用于攔截自定義的異常。
  3. 創建控制器類,指定自定義異常的觸發條件。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/87013.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/87013.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/87013.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

VIC-3D應用指南系列之:DIC數字圖像相關技術與熱成像(VIC-3D IR System助力熱載荷測試)

本篇文章詳細講述了利用VIC-3D 10將數字圖像相關DIC數據與紅外相機熱成像的溫度數據相結合的操作流程。核心步驟包括&#xff1a; 相機選型與系統搭建 測試環境配置 VIC-Snap參數設置 雙系統標定&#xff08;DIC與紅外&#xff09; 外部參數計算 測試圖像采集 紅外…

adoc(asciidoc)轉為markdown的方法,把.adoc文件轉換為markdown格式

要將.adoc文件轉換為markdown格式&#xff0c;可以按照以下步驟操作&#xff1a; 安裝必要工具&#xff1a; sudo apt install pandoc asciidoc轉換流程&#xff1a; 先將asciidoc轉換為docbook格式&#xff1a; asciidoc -b docbook foo.adoc然后將docbook轉換為markdown&…

2022mpsPTE崗位筆試題

2022年9月完成了PTE崗位的筆試&#xff0c;并通過了。淺淺的還有一點印象&#xff0c;之前有朋友也想來&#xff0c;就放在這里&#xff0c;供需要的朋友看。 前兩個題是關于C語言的。 語言不限&#xff0c;C也可。 一個是輸出2到100偶數之和&#xff0c;主要就是調用for循環。…

使用Cursor + Devbox + Uniapp 一站式AI編程開發移動端(App、H5、小程序)

文章目錄 前言&#x1f4d6;一、工具介紹&#x1f6e0;?1. Cursor&#xff1a;AI驅動的智能代碼編輯器2. Devbox&#xff1a;可復現的開發環境管理3. Uniapp&#xff1a;跨平臺應用開發框架 二、環境配置與集成&#x1f52e;1. 安裝與配置Devbox2. 配置Cursor連接Devbox環境3.…

[智能客服project] AI提示詞配置 | 主協調器 | 閑魚協議工具

第五章&#xff1a;AI提示詞配置 歡迎回來&#xff01; 在第四章&#xff1a;意圖路由器中&#xff0c;我們了解了機器人如何通過IntentRouter確定由哪個專家代理&#xff08;如PriceAgent或TechAgent&#xff09;處理用戶消息。 但代理被選定后&#xff0c;如何知道該說什么…

CMake 構建系統概述

關鍵要點 研究表明&#xff0c;CMake 是一種強大的跨平臺構建系統&#xff0c;廣泛用于 C 項目。證據傾向于認為&#xff0c;CMake 通過生成本地構建文件&#xff08;如 Makefile、Visual Studio 項目&#xff09;簡化軟件構建。它似乎可能支持多種平臺&#xff0c;包括 Windo…

如何順利將電話號碼轉移到新iPhone?

當您升級到新 iPhone 時&#xff0c;您需要做的第一件事就是轉移您的電話號碼。幸運的是&#xff0c;以目前的技術&#xff0c;很容易解決如何將電話號碼轉移到新iPhone上。此外&#xff0c;傳輸過程也得到了簡化。您可以輕松地將舊手機更換為新 iPhone&#xff0c;而不會丟失任…

java面試總結-20250609

DDD領域設計模型怎么理解&#xff1f; mysql和mongoDB分別適用于哪些業務場景&#xff1f; 查詢的場景&#xff0c;數量級的差異&#xff1f; mongodb為什么用B樹&#xff1f;用的什么數據引擎&#xff0c;部署方式使用什么模式&#xff0c;分片分了多少片&#xff0c;路由方…

使用GpuGeek訓練圖像分類器:從入門到精通

引言 在當今人工智能蓬勃發展的時代&#xff0c;圖像分類作為計算機視覺的基礎任務之一&#xff0c;已經廣泛應用于醫療診斷、自動駕駛、安防監控等諸多領域。然而&#xff0c;對于許多初學者和中小型企業來說&#xff0c;構建一個高效的圖像分類系統仍然面臨諸多挑戰&#xf…

Qt Widget類解析與代碼注釋

#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//解釋這串代碼&#xff0c;寫上注釋 當然可以&#xff01;這段代碼是 Qt …

2025年滲透測試面試題總結-字節跳動[實習]安全研發員(題目+回答)

安全領域各種資源&#xff0c;學習文檔&#xff0c;以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各種好玩的項目及好用的工具&#xff0c;歡迎關注。 目錄 字節跳動[實習]安全研發員 1. 攻防演練中得意經歷 2. 安全領域擅長方向 3. 代碼審計語言偏向 4. CSRF修復…

Springboot短視頻推薦系統b9wc1(程序+源碼+數據庫+調試部署+開發環境)帶論文文檔1萬字以上,文末可獲取,系統界面在最后面。

系統程序文件列表 項目功能&#xff1a;用戶,視頻分類,視頻信息 開題報告內容&#xff1a; 基于Spring Boot的短視頻推薦系統開題報告 一、研究背景與意義 隨著移動互聯網的普及和短視頻行業的爆發式增長&#xff0c;用戶日均觀看短視頻時長已突破2小時&#xff0c;但海量內…

使用聯邦學習進行CIFAR-10分類任務

在深度學習領域,圖像分類任務是一個經典的應用,而CIFAR-10數據集則是圖像分類研究中的重要基準數據集之一。該數據集包含10類不同的圖像,每類有6,000個32x32像素的彩色圖像,共計60,000個圖像。在傳統的集中式學習中,所有數據都被集中到一個服務器上進行訓練。然而,隨著數…

【Linux網絡編程】基于udp套接字實現的網絡通信

目錄 一、實現目標&#xff1a; 二、實驗步驟&#xff1a; 1、服務端代碼解析&#xff1a; Init()&#xff1a; Run()&#xff1a; 2、客戶端代碼&#xff1a; 主函數邏輯&#xff1a; send_message發送數據&#xff1a; recv_message接收數據&#xff1a; 三、實驗結…

2025年想沖網安方向,該考華為安全HCIE還是CISSP?

打算2025年往網絡安全方向轉&#xff0c;現在考證是不是來得及&#xff1f;考啥證&#xff1f; 說實話&#xff0c;網絡安全這幾年熱得發燙&#xff0c;但熱歸熱&#xff0c;入門門檻也不低&#xff0c;想進這個賽道&#xff0c;技術、項目經驗、證書&#xff0c;缺一不可。 …

【系統架構設計師-2025上半年真題】綜合知識-參考答案及部分詳解(回憶版)

更多內容請見: 備考系統架構設計師-專欄介紹和目錄 文章目錄 【第1題】【第2題】【第3題】【第4題】【第5題】【第6題】【第7題】【第8題】【第9題】【第10題】【第11題】【第12題】【第13題】【第14題】【第15題】【第16題】【第17題】【第18題】【第19題】【第20~21題】【第…

「Java EE開發指南」如何用MyEclipse創建一個WEB項目?(一)

在本文中&#xff0c;您可以找到有關WEB項目的信息。將了解&#xff1a; Web項目結構和參數Web開發生產力工具JSP代碼完成和驗證 這些特性在MyEclipse中可用。 MyEclipse v2025.1離線版下載 一、Web項目結構 用最簡單的術語來說&#xff0c;MyEclipse Web項目是一個Eclips…

Elasticsearch:使用 ES|QL 進行地理空間距離搜索

作者&#xff1a;來自 Elastic Craig Taverner 在 Elasticsearch 查詢語言&#xff08;ES|QL&#xff09;中探索地理空間距離搜索&#xff0c;這是 Elasticsearch 地理空間搜索中最受歡迎和最有用的功能之一&#xff0c;也是 ES|QL 中的重要特性。 想獲得 Elastic 認證嗎&#…

列舉開源的模型和推理框架

當然可以&#xff01;下面是一個系統性的列表&#xff0c;按 開源大模型&#xff08;LLM&#xff09; 和 推理框架 兩大類列出&#xff0c;并配上簡要說明。 &#x1f9e0; 一、開源大語言模型&#xff08;LLMs&#xff09; 名稱發布者語言能力模型大小特點LLaMA 2 / 3Meta英文…

深入講解一下 Nomic AI 的 GPT4All 這個項目

我們來深入講解一下 Nomic AI 的 GPT4All 這個項目。 這是一個非常優秀和流行的開源項目&#xff0c;我會從**“它是什么”、“為什么它很重要”、“項目架構和源碼結構”以及“如何使用”**這幾個方面為你全面剖析。 一、項目概述 (Project Overview) 簡單來說&#xff0c;…