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

SpringBoot如何進行業(yè)務校驗實例詳解

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

前言

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

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

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

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

首先我們來看看為什么需要Assert?

為什么需要Assert?

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

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

主要原因有兩個:

  • 因為Validator只解決了參數(shù)自身的數(shù)據(jù)校驗,解決不了參數(shù)和業(yè)務數(shù)據(jù)之間校驗。

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

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

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

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

如何使用Assert?

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

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

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

如上,AssertController有一個刪除用戶的接口,當刪除用戶時我們需要先校驗用戶是否存在。這里直接使用Assert.notNull()進行UserVO的非空校驗。

此時訪問接口,返回的json對象如下:

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

從測試結(jié)果來看,assert拋出的異常是springboot原生json對象,很明顯我們必須將其加入全局異常攔截器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ù)據(jù)結(jié)果為:

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

符合結(jié)果預期。

常見的Assert使用場景

  • 邏輯斷言

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

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

  • 對象和類型斷言

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

  2. isNull()用來檢查對象為null:

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

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

  • 文本斷言

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

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

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

  • Collection和map斷言

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

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

  • 數(shù)組斷言

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

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

小結(jié)

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

總結(jié)

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

相關(guān)文章

  • 自定義的Troop<T>泛型類( c++, java和c#)的實現(xiàn)代碼

    自定義的Troop<T>泛型類( c++, java和c#)的實現(xiàn)代碼

    這篇文章主要介紹了自定義的Troop<T>泛型類( c++, java和c#)的實現(xiàn)代碼的相關(guān)資料,需要的朋友可以參考下
    2017-05-05
  • PowerJob的OmsLogHandler工作流程源碼解析

    PowerJob的OmsLogHandler工作流程源碼解析

    這篇文章主要為大家介紹了PowerJob的OmsLogHandler工作流程源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-12-12
  • 十五道tomcat面試題,為數(shù)不多的機會!

    十五道tomcat面試題,為數(shù)不多的機會!

    這篇文章主要介紹了十五道tomcat面試題,Tomcat的本質(zhì)是一個Servlet容器。一個Servlet能做的事情是:處理請求資源,并為客戶端填充response對象,需要的朋友可以參考下
    2021-08-08
  • Java實現(xiàn)微信支付的項目實踐

    Java實現(xiàn)微信支付的項目實踐

    最近的一個項目中涉及到了支付業(yè)務,其中用到了微信支付和支付寶支付,本文就來介紹一下Java實現(xiàn)微信支付的項目實踐,具有一定的參考價值,感興趣的可以了解一下
    2023-10-10
  • spring boot 開發(fā)soap webservice的實現(xiàn)代碼

    spring boot 開發(fā)soap webservice的實現(xiàn)代碼

    這篇文章主要介紹了spring boot 開發(fā)soap webservice的實現(xiàn)代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-01-01
  • ocp開閉原則_動力節(jié)點Java學院整理

    ocp開閉原則_動力節(jié)點Java學院整理

    這篇文章主要為大家詳細介紹了ocp開閉原則的相關(guān)資料,ocp開閉原則指導我們?nèi)绾谓⒁粋€穩(wěn)定的、靈活的系統(tǒng),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • 在Java中為日期增加一天的多種方法

    在Java中為日期增加一天的多種方法

    這篇文章主要給大家介紹了關(guān)于如何在Java中為日期增加一天的多種方法,在JAVA業(yè)務代碼中,經(jīng)常會遇到通過指定時間,增加指定天數(shù)的業(yè)務需求,需要的朋友可以參考下
    2023-07-07
  • 構(gòu)建多模塊的Spring Boot項目步驟全紀錄

    構(gòu)建多模塊的Spring Boot項目步驟全紀錄

    這篇文章主要給大家介紹了關(guān)于如何構(gòu)建多模塊的Spring Boot項目的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用SpringBoot具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-05-05
  • mybatisplus 的SQL攔截器實現(xiàn)關(guān)聯(lián)查詢功能

    mybatisplus 的SQL攔截器實現(xiàn)關(guān)聯(lián)查詢功能

    大家都知道m(xù)ybatisplus不支持關(guān)聯(lián)查詢,后來學習研究發(fā)現(xiàn)mybatisplus的SQL攔截器可以實現(xiàn)這一操作,下面小編給大家分享我的demo實現(xiàn)基本的關(guān)聯(lián)查詢功能沒有問題,對mybatisplus關(guān)聯(lián)查詢相關(guān)知識感興趣的朋友一起看看吧
    2021-06-06
  • 重新啟動IDEA時maven項目SSM框架文件變色所有@注解失效

    重新啟動IDEA時maven項目SSM框架文件變色所有@注解失效

    這篇文章主要介紹了重新啟動IDEA時maven項目SSM框架文件變色所有@注解失效,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-03-03

最新評論