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

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

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

步驟

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);  //此處記得實(shí)例化
        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("錯(cuò)誤原因是:" + e.getMessage());
        return R.fail("系統(tǒng)異常,原因如下:"+e.getMessage());
    }

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

3、斷言類

可以自己進(jìn)行補(bǔ)充

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)惠券不存在");

可以讓代碼變得相對(duì)簡(jiǎn)潔

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

補(bǔ)充:異常處理器說明

handleServletException

一個(gè)http請(qǐng)求,在到達(dá)Controller前,會(huì)對(duì)該請(qǐng)求的請(qǐng)求信息與目標(biāo)控制器信息做一系列校驗(yàn)。這里簡(jiǎn)單說一下:NoHandlerFoundException:首先根據(jù)請(qǐng)求Url查找有沒有對(duì)應(yīng)的控制器,若沒有則會(huì)拋該異常,也就是大家非常熟悉的404異常;

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

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

MissingServletRequestParameterException:缺少請(qǐng)求參數(shù)。比如定義了參數(shù)@RequestParam("licenceId") String licenceId,但發(fā)起請(qǐng)求時(shí),未攜帶該參數(shù),則會(huì)拋該異常;TypeMismatchException: 參數(shù)類型匹配失敗。比如:接收參數(shù)為L(zhǎng)ong型,但傳入的值確是一個(gè)字符串,那么將會(huì)出現(xiàn)類型轉(zhuǎn)換失敗的情況,這時(shí)會(huì)拋該異常;

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

handleBindException

參數(shù)校驗(yàn)異常,后文詳細(xì)說明。

handleValidException

參數(shù)校驗(yàn)異常,后文詳細(xì)說明。

handleBusinessException、handleBaseException

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

handleException

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

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

總結(jié)

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

相關(guān)文章

  • java基礎(chǔ)之?dāng)?shù)組常用操作總結(jié)(必看篇)

    java基礎(chǔ)之?dāng)?shù)組常用操作總結(jié)(必看篇)

    下面小編就為大家?guī)硪黄猨ava基礎(chǔ)之?dāng)?shù)組常用操作總結(jié)(必看篇)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-06-06
  • java開發(fā)中防止重復(fù)提交的幾種解決方案

    java開發(fā)中防止重復(fù)提交的幾種解決方案

    我們?nèi)粘i_發(fā)中有很多的應(yīng)用場(chǎng)景都會(huì)遇到重復(fù)提交問題,下面這篇文章主要給大家介紹了關(guān)于java開發(fā)中防止重復(fù)提交的幾種解決方案,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-10-10
  • java多線程編程技術(shù)詳解和實(shí)例代碼

    java多線程編程技術(shù)詳解和實(shí)例代碼

    這篇文章主要介紹了 java多線程編程技術(shù)詳解和實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下
    2017-04-04
  • Spring?Boot統(tǒng)一接口返回及全局異常處理

    Spring?Boot統(tǒng)一接口返回及全局異常處理

    這篇文章主要介紹了Spring?Boot統(tǒng)一接口返回及全局異常處理,文章圍繞主題展開相關(guān)資料,具有一定的參考價(jià)值需要的小伙伴可以參考一下
    2022-04-04
  • MyBatis Plus整合Redis實(shí)現(xiàn)分布式二級(jí)緩存的問題

    MyBatis Plus整合Redis實(shí)現(xiàn)分布式二級(jí)緩存的問題

    Mybatis內(nèi)置的二級(jí)緩存在分布式環(huán)境下存在分布式問題,無法使用,但是我們可以整合Redis來實(shí)現(xiàn)分布式的二級(jí)緩存,這篇文章給大家介紹MyBatis Plus整合Redis實(shí)現(xiàn)分布式二級(jí)緩存,感興趣的朋友跟隨小編一起看看吧
    2023-11-11
  • Java IO流之字節(jié)輸入流的使用詳解

    Java IO流之字節(jié)輸入流的使用詳解

    這篇文章主要為大家詳細(xì)介紹了Java IO流中字節(jié)輸入流的使用,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Java有一定的幫助,需要的可以參考一下
    2022-08-08
  • 解決springboot整合cxf-jaxrs中json轉(zhuǎn)換的問題

    解決springboot整合cxf-jaxrs中json轉(zhuǎn)換的問題

    這篇文章主要介紹了解決springboot整合cxf-jaxrs中json轉(zhuǎn)換的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • 詳解微信小程序 同步異步解決辦法

    詳解微信小程序 同步異步解決辦法

    這篇文章主要介紹了詳解微信小程序 同步異步解決辦法的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • spring boot@EnableXXXX注解編程模型講解

    spring boot@EnableXXXX注解編程模型講解

    這篇文章主要介紹了spring boot@EnableXXXX注解編程模型,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • 淺談Java反射與代理

    淺談Java反射與代理

    下面小編就為大家?guī)硪黄獪\談Java反射與代理。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-07-07

最新評(píng)論