欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

springBoot項目中的全局異常處理和自定義異常處理實現(xiàn)

 更新時間:2024年08月12日 09:58:17   作者:小白寫代碼hh  
異常是由于程序邏輯錯誤、運行環(huán)境問題、用戶輸入錯誤等原因?qū)е碌囊环N非正常的狀態(tài)或事件,本文主要介紹了springBoot項目中的全局異常處理和自定義異常處理實現(xiàn),具有一定的參考價值,感興趣的可以了解一下

1 什么是異常

異常(Exception)是在程序執(zhí)行過程中出現(xiàn)的一種特殊情況或錯誤。它可以是由于程序邏輯錯誤、運行環(huán)境問題、用戶輸入錯誤等原因?qū)е碌囊环N非正常的狀態(tài)或事件。

在編程領(lǐng)域中,異常通常用來表示一種無法預(yù)料或處理的情況,它會導(dǎo)致程序無法繼續(xù)正常執(zhí)行。當(dāng)程序運行過程中遇到異常,如果沒有適當(dāng)?shù)奶幚頇C制,可能會導(dǎo)致程序崩潰或產(chǎn)生未預(yù)期的結(jié)果。

2 異常的種類

Checked Exception(已檢查異常):這類異常是在編譯時強制要求程序員進行處理的異常,如文件未找到、數(shù)據(jù)庫連接失敗等。Java 中的 checked exception 必須在方法簽名中聲明,或者使用 try-catch 塊進行捕獲處理,否則編譯不通過。

Unchecked Exception(未檢查異常):也稱為運行時異常(RuntimeException),通常是由于編程錯誤或者運行環(huán)境出現(xiàn)問題引起的異常,如空指針異常(NullPointerException)、數(shù)組越界異常(ArrayIndexOutOfBoundsException)等。編譯器不要求強制捕獲或者聲明這類異常,程序員可以選擇捕獲和處理,但不是必須的。

處理異常的主要目的是為了保證程序的穩(wěn)定性和可靠性。通常的處理方式包括捕獲異常、記錄異常信息、恢復(fù)程序狀態(tài)、通知用戶等。

3 解決異常的方式

1、捕獲和處理異常(try-catch)

  • 使用 try-catch 塊來捕獲可能拋出異常的代碼塊。
  • 在 try 塊中編寫可能引發(fā)異常的代碼,然后在 catch 塊中處理異常。
  • 這種方式適用于已檢查異常(checked exception),以及可以預(yù)料到可能出現(xiàn)的異常情況

2、拋出異常(throw)

  • 在方法中使用 throw 關(guān)鍵字拋出異常,告知調(diào)用者可能發(fā)生的異常情況。
  • 通常在方法內(nèi)部檢測到無法處理的情況時拋出異常,將問題交給上層調(diào)用者處理。

3、使用 finally 塊

  • finally 塊中的代碼總是會被執(zhí)行,無論是否拋出異常,用于釋放資源或者確保某些操作一定會執(zhí)行。

4、使用 try-with-resources

  • 對于實現(xiàn)了 AutoCloseable 接口的資源,可以使用 try-with-resources 語句,確保資源在使用后自動關(guān)閉。
  • 適用于需要手動關(guān)閉的資源管理,如文件操作、數(shù)據(jù)庫連接等。

4 全局異常處理器和自定義異常處理器

全局異常處理器是一種集中處理應(yīng)用程序中所有未捕獲異常的機制,常用于 Web 應(yīng)用程序中,以提供統(tǒng)一的異常處理和用戶友好的錯誤響應(yīng)。在 Java 的 Spring 框架中,可以使用 @ControllerAdvice 和 @ExceptionHandler 注解來實現(xiàn)全局異常處理。在全局異常處理器中,解決了異常種類繁多以及每個業(yè)務(wù)里面都需要去處理異常,所以Spring中提供了一種上層調(diào)用的方式來進行異常處理,把數(shù)據(jù)層和業(yè)務(wù)層的異常都向上拋放到應(yīng)用層來處理,這樣就可以統(tǒng)一對異常進行處理

類:ProjectExceptionAdvice

package com.hyh.ad.common.exceptionhandler;

import cn.hutool.core.date.DateTime;
import com.hyh.ad.common.core.domain.AjaxResult;
import com.hyh.ad.common.exceptions.BusinessException;
import com.hyh.ad.common.exceptions.SystemException;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;


/**
 * 異常處理切面
 * 處理BusinessException異常
 * 處理SystemException異常
 * @author hyh
 */

@Slf4j
@RestControllerAdvice
public class ProjectExceptionAdvice {
    /**
     * @param  e
     * @return 業(yè)務(wù)異常處理的信息
     */
    @ExceptionHandler(BusinessException.class)
    public AjaxResult handleBusinessException(BusinessException e) {
        //記錄日志
        log.error(e.getMessage(), e);
        //返回錯誤信息
        return AjaxResult.error(e.getCode(), e.getMessage());
    }

    /**
     * @param  e
     * @return 系統(tǒng)異常處理的信息
     */
    @ExceptionHandler(SystemException.class)
    public AjaxResult handleSystemException(BusinessException e) {
        //記錄日志
        log.error(e.getMessage(), e);
        //返回錯誤信息
        return AjaxResult.error(e.getCode(), e.getMessage());
    }

    /** 
     * 自定義異常處理的信息
     * 其他異常都經(jīng)過這個來處理 也可以自己來定義自己需要的異常處理
     * @param  e
     * @return 
     */
    @ExceptionHandler(Exception.class)
    public AjaxResult doException(Exception e) {
        //記錄日志
        log.error(e.getMessage(), e);
        //返回錯誤信息
        return AjaxResult.error(e.getMessage() + DateTime.now());
    }
}

其中AjaxResult請換成自己封裝的用于返回數(shù)據(jù)結(jié)果的對象 

在這個類里面可以對所有的異常進行處理,包括系統(tǒng)異常、編譯異常、運行異常、自定義異常這些異常返回相對友好的信息。

類:BusinessException 業(yè)務(wù)異常

package com.hyh.ad.common.exceptions;


/**
 * 業(yè)務(wù)異常處理器
 * @author hyh
 */
public class BusinessException extends RuntimeException{

    /*
     * 異常消息
     */
    private Integer code;

    public Integer getCode() {
        return code;
    }

    public void setCode(Integer code) {
        this.code = code;
    }

    public BusinessException(Integer code) {
        this.code = code;
    }

    public BusinessException( Integer code,String message) {
        super(message);
        this.code = code;
    }

    public BusinessException(Integer code,String message, Throwable cause) {
        super(message, cause);
        this.code = code;
    }

    public BusinessException(Throwable cause, Integer code) {
        super(cause);
        this.code = code;
    }

    public BusinessException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace, Integer code) {
        super(message, cause, enableSuppression, writableStackTrace);
        this.code = code;
    }
}

 類:SystemException 系統(tǒng)異常

package com.hyh.ad.common.exceptions;
/**
 * 系統(tǒng)異常處理器
 * @author  hyh
 */
public class SystemException extends RuntimeException{

    /*
     * 異常消息
     */
    private Integer code;

    public Integer getCode() {
        return code;
    }

    public void setCode(Integer code) {
        this.code = code;
    }

    public SystemException(Integer code) {
        this.code = code;
    }

    public SystemException(Integer code, String message) {
        super(message);
        this.code = code;
    }

    public SystemException(Integer code, String message, Throwable cause) {
        super(message, cause);
        this.code = code;
    }

    public SystemException(Throwable cause, Integer code) {
        super(cause);
        this.code = code;
    }

    public SystemException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace, Integer code) {
        super(message, cause, enableSuppression, writableStackTrace);
        this.code = code;
    }
}

5 測試異常處理

這里就是我模擬的一個發(fā)送郵箱驗證碼的異常,他把異常信息返還給了前端,并且還帶有異常發(fā)生的時間。

接下來 我手動模擬了一個異常 然后再次請求一下數(shù)據(jù)

可以看到 返回了我們自定義的異常信息,包括提示信息和編碼 

到此這篇關(guān)于springBoot項目中的全局異常處理和自定義異常處理實現(xiàn)的文章就介紹到這了,更多相關(guān)springBoot 全局異常和自定義異常內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家! 

相關(guān)文章

  • 聊聊springboot中整合log4g2的問題

    聊聊springboot中整合log4g2的問題

    這篇文章主要介紹了springboot中整合log4g2的方法,自定義文件名需要在application.yml中配置,在config中配置log4g2.xml文件,本文通過實例代碼給大家介紹的非常詳細,需要的朋友可以參考下
    2021-11-11
  • SpringBoot集成WebSocket實現(xiàn)后臺向前端推送信息的示例

    SpringBoot集成WebSocket實現(xiàn)后臺向前端推送信息的示例

    這篇文章主要介紹了SpringBoot集成WebSocket實現(xiàn)后臺向前端推送信息的示例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • Java中實現(xiàn)多線程的幾種方式總結(jié)

    Java中實現(xiàn)多線程的幾種方式總結(jié)

    文章介紹了三種創(chuàng)建線程的方式:繼承Thread類、實現(xiàn)Runnable接口和實現(xiàn)Callable接口,并比較了它們之間的區(qū)別和優(yōu)缺點
    2025-01-01
  • lambda表達式解決java后臺分組排序過程解析

    lambda表達式解決java后臺分組排序過程解析

    這篇文章主要介紹了lambda表達式解決java后臺分組排序過程解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-10-10
  • 簡單談?wù)刯ava的異常處理(Try Catch Finally)

    簡單談?wù)刯ava的異常處理(Try Catch Finally)

    在程序設(shè)計中,進行異常處理是非常關(guān)鍵和重要的一部分。一個程序的異常處理框架的好壞直接影響到整個項目的代碼質(zhì)量以及后期維護成本和難度。
    2016-03-03
  • Java中synchronized的四種用法詳解

    Java中synchronized的四種用法詳解

    這篇文章主要介紹了Java中synchronized的四種用法詳解,當(dāng)我們處理多線程處理同步問題的時候就會用到synchronized這個關(guān)鍵字,下面介紹下synchronized的四種用法,需要的朋友可以參考下
    2024-01-01
  • Java中內(nèi)存區(qū)域的劃分與異常詳解

    Java中內(nèi)存區(qū)域的劃分與異常詳解

    最近在看java虛擬相關(guān)知識,把每天看到的一些內(nèi)容做一個歸納總結(jié),下面這篇文章主要給大家介紹了關(guān)于Java中內(nèi)存區(qū)域的劃分與異常的相關(guān)資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考借鑒,下面來一起看看吧
    2018-06-06
  • 簡單了解Java編程中對異常處理的運用

    簡單了解Java編程中對異常處理的運用

    這篇文章主要簡單介紹了Java編程中對異常處理的運用,是Java入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下
    2015-09-09
  • Java實現(xiàn)簡單登陸界面

    Java實現(xiàn)簡單登陸界面

    這篇文章主要為大家詳細介紹了Java實現(xiàn)簡單登陸界面,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • Java獲取文件的類型和擴展名的實現(xiàn)方法

    Java獲取文件的類型和擴展名的實現(xiàn)方法

    這篇文章主要介紹了Java獲取文件的類型和擴展名的實現(xiàn)方法的相關(guān)資料,需要的朋友可以參考下
    2017-02-02

最新評論