最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

springboot斷言異常封裝與統(tǒng)一異常處理實現代碼

 更新時間:2023年01月11日 11:27:30   作者:WalkerShen  
異常處理其實一直都是項目開發(fā)中的大頭,但關注異常處理的人一直都特別少,下面這篇文章主要給大家介紹了關于springboot斷言異常封裝與統(tǒng)一異常處理的相關資料,需要的朋友可以參考下

步驟

1、異常類

package com.walker.dianping.common.exceptions;

import lombok.Data;

@Data
//繼承RuntimeException
public class BizException extends RuntimeException {

    private String msg;

    public BizException(String msg) {
        super(msg);  //此處記得實例化
        this.msg = msg;
    }
}

2、統(tǒng)一異常處理配置類

package com.walker.dianping.common.config;

import com.walker.dianping.common.exceptions.BizException;
import com.walker.dianping.model.R;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;

@RestControllerAdvice
@Slf4j
public class MyExceptionHandler {

    @ExceptionHandler(value = BizException.class)
    public R BizExceptionHandler(Exception e) {
        log.error("錯誤原因是:" + e.getMessage());
        return R.fail("系統(tǒng)異常,原因如下:"+e.getMessage());
    }

    @ExceptionHandler(value = Exception.class)
    public R exceptionHandler(Exception e) {
        log.error("錯誤原因是:" + e.getMessage());
        return R.fail(e.getMessage());
    }
}

3、斷言類

可以自己進行補充

package com.walker.dianping.common.utils;

import com.walker.dianping.common.exceptions.BizException;
import org.apache.commons.lang3.StringUtils;

public abstract class Assert {

    //如果字符串為空的話,就拋出異常
    public static void isBlank(String str, String message) {
        if (StringUtils.isBlank(str)) {
            throw new BizException(message);
        }
    }

    public static void isNull(Object object, String message) {
        if (object == null) {
            throw new BizException(message);
        }
    }
}

4、使用

//查詢類,如果類不存在則拋出異常
TbSeckillVoucherEntity entity = getById(voucherId);
 Assert.isNull(entity,"該"+voucherId+"優(yōu)惠券不存在");

可以讓代碼變得相對簡潔

接下來分別對這幾種異常處理器做詳細說明。

補充:異常處理器說明

handleServletException

一個http請求,在到達Controller前,會對該請求的請求信息與目標控制器信息做一系列校驗。這里簡單說一下:NoHandlerFoundException:首先根據請求Url查找有沒有對應的控制器,若沒有則會拋該異常,也就是大家非常熟悉的404異常;

HttpRequestMethodNotSupportedException:若匹配到了(匹配結果是一個列表,不同的是http方法不同,如:Get、Post等),則嘗試將請求的http方法與列表的控制器做匹配,若沒有對應http方法的控制器,則拋該異常;

HttpMediaTypeNotSupportedException:然后再對請求頭與控制器支持的做比較,比如content-type請求頭,若控制器的參數簽名包含注解@RequestBody,但是請求的content-type請求頭的值沒有包含application/json,那么會拋該異常(當然,不止這種情況會拋這個異常);MissingPathVariableException:未檢測到路徑參數。比如url為:/licence/{licenceId},參數簽名包含@PathVariable("licenceId"),當請求的url為/licence,在沒有明確定義url為/licence的情況下,會被判定為:缺少路徑參數;

MissingServletRequestParameterException:缺少請求參數。比如定義了參數@RequestParam("licenceId") String licenceId,但發(fā)起請求時,未攜帶該參數,則會拋該異常;TypeMismatchException: 參數類型匹配失敗。比如:接收參數為Long型,但傳入的值確是一個字符串,那么將會出現類型轉換失敗的情況,這時會拋該異常;

HttpMessageNotReadableException:與上面的HttpMediaTypeNotSupportedException舉的例子完全相反,即請求頭攜帶了"content-type: application/json;charset=UTF-8",但接收參數卻沒有添加注解@RequestBody,或者請求體攜帶的 json 串反序列化成 pojo 的過程中失敗了,也會拋該異常;HttpMessageNotWritableException:返回的 pojo 在序列化成 json 過程失敗了,那么拋該異常;

handleBindException

參數校驗異常,后文詳細說明。

handleValidException

參數校驗異常,后文詳細說明。

handleBusinessException、handleBaseException

處理自定義的業(yè)務異常,只是handleBaseException處理的是除了 BusinessException 意外的所有業(yè)務異常。就目前來看,這2個是可以合并成一個的。

handleException

處理所有未知的異常,比如操作數據庫失敗的異常。

注:上面的 handleServletException、 handleException 這兩個處理器,返回的異常信息,不同環(huán)境返回的可能不一樣,以為這些異常信息都是框架自帶的異常信息,一般都是英文的,不太好直接展示給用戶看,所以統(tǒng)一返回 SERVER_ERROR代表的異常信息。

總結

到此這篇關于springboot斷言異常封裝與統(tǒng)一異常處理實現的文章就介紹到這了,更多相關springboot斷言異常封裝內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Java基礎教程之static五大應用場景

    Java基礎教程之static五大應用場景

    這篇文章主要給大家介紹了關于Java基礎教程之static五大應用場景的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-06-06
  • Java中Semaphore信號量的方法解析

    Java中Semaphore信號量的方法解析

    這篇文章主要介紹了Java中Semaphore信號量的方法解析,??Semaphore信號量是用來控制同?時訪問?特定?資?源的?線?程數量,它通?過協(xié)調?各個?線?程,以保證合理的使用公共?資源,需要的朋友可以參考下
    2023-12-12
  • idea2019導入maven項目中的某些問題及解決方法

    idea2019導入maven項目中的某些問題及解決方法

    這篇文章主要介紹了idea2019導入maven項目中的某些問題,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-08-08
  • Springmvc處理ajax請求并返回json數據

    Springmvc處理ajax請求并返回json數據

    這篇文章主要介紹了Springmvc處理ajax請求并返回json數據,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-07-07
  • Java實現List集合轉樹形結構的示例詳解

    Java實現List集合轉樹形結構的示例詳解

    在開發(fā)中,我們通常需要將從數據庫中查詢的集合數據轉換成類似文件系統(tǒng)一樣的樹形集合。本文將利用Java語言實現這一功能,感興趣的可以了解一下
    2022-08-08
  • SpringBoot導出PDF的四種實現方法詳解

    SpringBoot導出PDF的四種實現方法詳解

    在Spring?Boot應用程序中實現PDF導出功能,可以選擇多種庫和技術棧,本文為大家整理了四種常見的方法,感興趣的小伙伴可以參考一下
    2025-02-02
  • mybatisplus如何解決分頁最多500條數據

    mybatisplus如何解決分頁最多500條數據

    這篇文章主要介紹了mybatisplus如何解決分頁最多500條數據的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • Mybatis控制臺打印SQL語句的兩種方式實現

    Mybatis控制臺打印SQL語句的兩種方式實現

    這篇文章主要介紹了Mybatis控制臺打印SQL語句的兩種方式實現,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-03-03
  • java并發(fā)編程之ThreadLocal詳解

    java并發(fā)編程之ThreadLocal詳解

    在鎖的使用中會導致運行效率降低,ThreadLocal的使用徹底避免對共享資源的競爭,同時又可以不影響效率。本文詳細講解了ThreadLocal,需要了解的小伙伴可以看一看這篇文章
    2021-08-08
  • Java創(chuàng)建類模式_動力節(jié)點Java學院整理

    Java創(chuàng)建類模式_動力節(jié)點Java學院整理

    這篇文章主要為大家詳細介紹了Java創(chuàng)建類模式的相關方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-08-08

最新評論

黑龙江省| 景谷| 平安县| 丽江市| 女性| 探索| 顺义区| 乌什县| 繁峙县| 航空| 府谷县| 威远县| 金门县| 淮南市| 旬邑县| 新邵县| 汾西县| 咸宁市| 赣州市| 广南县| 铁岭市| 南澳县| 喀喇| 汤阴县| 林州市| 祁连县| 德化县| 巴南区| 离岛区| 万州区| 乡城县| 罗甸县| 班玛县| 佛坪县| 黄陵县| 都匀市| 曲麻莱县| 多伦县| 吴江市| 黄山市| 新邵县|