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

SpringBoot如何進(jìn)行業(yè)務(wù)校驗(yàn)實(shí)例詳解

 更新時(shí)間:2022年01月24日 10:26:19   作者:飄渺Jam  
這篇文章主要給大家介紹了關(guān)于SpringBoot如何進(jìn)行業(yè)務(wù)校驗(yàn)的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

前言

今天繼續(xù)來(lái)聊聊在SpringBoot項(xiàng)目中如何實(shí)現(xiàn)業(yè)務(wù)異常校驗(yàn)Assert。

希望通過(guò)今天的文章,咱們能夠了解到:

  • 如何使用Assert參數(shù)校驗(yàn)?

  • 為什么用了Validator參數(shù)校驗(yàn),還必須再用Assert參數(shù)校驗(yàn)?

首先我們來(lái)看看為什么需要Assert?

為什么需要Assert?

Assert翻譯為中文為"斷言",它是spring的一個(gè)util類,org.springframework.util.Assert一般用來(lái)斷定某一個(gè)實(shí)際的值是否為自己預(yù)期想得到的,如果不一樣就拋出異常。

在前面的文章中我們?cè)敿?xì)介紹了SpringBoot中如何集成參數(shù)校驗(yàn)Validator,那既然有了Validator為什么還需要Assert呢?

主要原因有兩個(gè):

  • 因?yàn)閂alidator只解決了參數(shù)自身的數(shù)據(jù)校驗(yàn),解決不了參數(shù)和業(yè)務(wù)數(shù)據(jù)之間校驗(yàn)。

    例如以下代碼,Validator是搞不定的。

public?void?test1(int?accountId)?{
????Account?account?=?accountDao.selectById(accountId);
????if?(account?==?null)?{
????????throw?new?IllegalArgumentException("用戶不存在!");
????}
}
  • 采用Assert能使代碼更優(yōu)雅,更簡(jiǎn)潔。

    還是上面的例子,如果采用Assert可以這樣寫(xiě):

public?void?test2(int?accountId)?{
????Account?account?=?accountDao.selectById(accountId);
????Assert.notNull(account,?"用戶不存在!");
}

如何使用Assert?

在SpringBoot中使用Assert非常簡(jiǎn)單,直接使用Assert提供的靜態(tài)方法即可。

@RestController
@RequestMapping("assert")
@Slf4j
public?class?AssertController?{
????@DeleteMapping("/user/{id}")
????public?void?deleteUser(@PathVariable("id")?String?id)?{
????????//模擬數(shù)據(jù)庫(kù)查詢用戶
????????UserVO?user?=?getUserById(id);
????????Assert.notNull(user,?"用戶不存在!");
????}

????private?UserVO?getUserById(String?id)?{
????????return?null;
????}
}

如上,AssertController有一個(gè)刪除用戶的接口,當(dāng)刪除用戶時(shí)我們需要先校驗(yàn)用戶是否存在。這里直接使用Assert.notNull()進(jìn)行UserVO的非空校驗(yàn)。

此時(shí)訪問(wèn)接口,返回的json對(duì)象如下:

{
??"timestamp":?"2022-01-10T14:17:13.335+00:00",
??"status":?500,
??"error":?"Internal?Server?Error",
??"message":?"",
??"path":?"/assert/user/javadaily"
}

從測(cè)試結(jié)果來(lái)看,assert拋出的異常是springboot原生json對(duì)象,很明顯我們必須將其加入全局異常攔截器RestExceptionHandler。

加入全局異常攔截器

查看Assert.notNull()方法,可以看到Assert拋出的是IllegalArgumentException異常,所以我們只需要在全局異常攔截器中加入IllegalArgumentException攔截即可。

/**
??*?Assert異常
??*/
@ExceptionHandler(IllegalArgumentException.class)
@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
public?ResultData<String>?exception(IllegalArgumentException?e)?{
??return?ResultData.fail(ReturnCode.ILLEGAL_ARGUMENT.getCode(),e.getMessage());
}

此時(shí)再次訪問(wèn)接口,返回的數(shù)據(jù)結(jié)果為:

{
??"status":?3001,
??"message":?"用戶不存在!",
??"data":?null,
??"timestamp":?1641825258876
}

符合結(jié)果預(yù)期。

常見(jiàn)的Assert使用場(chǎng)景

  • 邏輯斷言

  1. isTrue()如果條件為假拋出IllegalArgumentException 異常。

  2. state()該方法與isTrue一樣,但拋出IllegalStateException異常。

  • 對(duì)象和類型斷言

  1. notNull()通過(guò)notNull()方法可以假設(shè)對(duì)象不null:

  2. isNull()用來(lái)檢查對(duì)象為null:

  3. isInstanceOf()使用isInstanceOf()方法檢查對(duì)象必須為另一個(gè)特定類型的實(shí)例

  4. isAssignable()使用Assert.isAssignable()方法檢查類型

  • 文本斷言

  1. hasLength()如果檢查字符串不是空符串,意味著至少包含一個(gè)空白,可以使用hasLength()方法。

  2. hasText()我們能增強(qiáng)檢查條件,字符串至少包含一個(gè)非空白字符,可以使用hasText()方法。

  3. doesNotContain()我們能通過(guò)doesNotContain()方法檢查參數(shù)不包含特定子串。

  • Collection和map斷言

  1. Collection應(yīng)用notEmpty()如其名稱所示,notEmpty()方法斷言collection不空,意味著不是null并包含至少一個(gè)元素。

  2. map應(yīng)用notEmpty()同樣的方法重載用于map,檢查map不null,并至少包含一個(gè)entry(key,value鍵值對(duì))。

  • 數(shù)組斷言

  1. notEmpty()notEmpty()方法可以檢查數(shù)組不null,且至少包括一個(gè)元素:

  2. noNullElements()noNullElements()方法確保數(shù)組不包含null元素

小結(jié)

Assert斷言,可以替換傳統(tǒng)的if判斷,大量減少業(yè)務(wù)參數(shù)校驗(yàn)的代碼行數(shù),提高程序的可讀性,這種風(fēng)格是目前比較流行的方式。

總結(jié)

到此這篇關(guān)于SpringBoot如何進(jìn)行業(yè)務(wù)校驗(yàn)的文章就介紹到這了,更多相關(guān)SpringBoot業(yè)務(wù)校驗(yàn)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java中使用HttpPost發(fā)送form格式的請(qǐng)求實(shí)現(xiàn)代碼

    Java中使用HttpPost發(fā)送form格式的請(qǐng)求實(shí)現(xiàn)代碼

    在Java中使用HttpPost發(fā)送form格式的請(qǐng)求,可以使用Apache HttpClient庫(kù)來(lái)實(shí)現(xiàn),這篇文章主要介紹了Java中使用HttpPost發(fā)送form格式的請(qǐng)求,本文給大家展示示例代碼,需要的朋友可以參考下
    2023-08-08
  • Spring Boot 實(shí)例代碼之通過(guò)接口安全退出

    Spring Boot 實(shí)例代碼之通過(guò)接口安全退出

    這篇文章主要介紹了Spring Boot 實(shí)例代碼之通過(guò)接口安全退出的相關(guān)資料,需要的朋友可以參考下
    2017-09-09
  • springboot的調(diào)度服務(wù)與異步服務(wù)使用詳解

    springboot的調(diào)度服務(wù)與異步服務(wù)使用詳解

    本文主要介紹了Java的ScheduledExecutorService接口和Spring Boot中如何使用調(diào)度線程池,包括核心參數(shù)、創(chuàng)建方式、自定義線程池、Cron表達(dá)式,以及如何在Spring Boot中配置和使用異步任務(wù),此外,還討論了如何模擬系統(tǒng)繁忙和調(diào)整異步線程池的拒絕策略
    2025-02-02
  • java枚舉enum和Enum類的使用

    java枚舉enum和Enum類的使用

    本文主要介紹了java枚舉enum和Enum類的使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • JAVA實(shí)現(xiàn)漢字轉(zhuǎn)拼音功能代碼實(shí)例

    JAVA實(shí)現(xiàn)漢字轉(zhuǎn)拼音功能代碼實(shí)例

    這篇文章主要介紹了JAVA實(shí)現(xiàn)漢字轉(zhuǎn)拼音功能代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-05-05
  • springboot 項(xiàng)目容器啟動(dòng)后如何自動(dòng)執(zhí)行指定方法

    springboot 項(xiàng)目容器啟動(dòng)后如何自動(dòng)執(zhí)行指定方法

    這篇文章主要介紹了springboot 項(xiàng)目容器啟動(dòng)后如何自動(dòng)執(zhí)行指定方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • SpringBoot整合Kafka完成生產(chǎn)消費(fèi)的方案

    SpringBoot整合Kafka完成生產(chǎn)消費(fèi)的方案

    網(wǎng)上找了很多管理kafka整合springboot的教程,但是很多都沒(méi)辦法應(yīng)用到生產(chǎn)環(huán)境,很多配置都是缺少,或者不正確的,只能當(dāng)個(gè)demo,所以本文給大家介紹了SpringBoot整合Kafka完成生產(chǎn)消費(fèi)的方案,需要的朋友可以參考下
    2024-12-12
  • Java后臺(tái)判斷ajax請(qǐng)求及處理過(guò)程詳解

    Java后臺(tái)判斷ajax請(qǐng)求及處理過(guò)程詳解

    這篇文章主要介紹了Java后臺(tái)判斷ajax請(qǐng)求及處理過(guò)程詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-03-03
  • MyBatis使用注解開(kāi)發(fā)實(shí)現(xiàn)過(guò)程詳解

    MyBatis使用注解開(kāi)發(fā)實(shí)現(xiàn)過(guò)程詳解

    這篇文章主要介紹了MyBatis使用注解開(kāi)發(fā)實(shí)現(xiàn)過(guò)程詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-03-03
  • Java 集合中的類關(guān)于線程安全

    Java 集合中的類關(guān)于線程安全

    這篇文章主要介紹了Java 集合中的類關(guān)于線程安全的相關(guān)資料,需要的朋友可以參考下
    2017-01-01

最新評(píng)論

永安市| 福鼎市| 连平县| 阜阳市| 西盟| 巴东县| 赫章县| 岗巴县| 周口市| 合肥市| 勃利县| 和硕县| 华坪县| 五莲县| 错那县| 永川市| 兴隆县| 永新县| 平原县| 大埔县| 河西区| 偃师市| 岳阳县| 大关县| 琼中| 莱芜市| 彭州市| 久治县| 家居| 平邑县| 阳高县| 兴国县| 余干县| 三门县| 句容市| 沈丘县| 依兰县| 新巴尔虎右旗| 秦安县| 永吉县| 宣汉县|