springboot注解@NotNull,@NotBlank,@Valid自動判定空值

一.前言

  • 使用springboot搭建項目時,我們都是采用的Restful風格接口,這里面問題來了,當前端調用接口或者是其他項目調用時,傳入參數時我們不能單一靠調用方來控制參數的準確性,自己也要一些參數進行判斷,進行非空之類的

簡單介紹
@NotEmpty
加了@NotEmpty的String類,Collection、Map、數組,是不能為null或者長度為0的(String、Collection、Map的isEmpth()方法)

@NotBlank
加了@NotBlank的String類不為null或者空

@NotNull
校驗不能為null。

使用方式
引入相關的依賴

	<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId></dependency>

實體增加注解

@Data
public class TestVo{@NotEmpty(message = "姓名不能為空")private String name;@NotEmpty(message = "身份證不能為空")private String id;

controller接收實體加校驗注解@Valid

public TestVotest(@RequestBody @Valid TestVo data) {
}

異常信息獲取:自定義全局異常控制器
?

@RestControllerAdvice
public class MyExceptionHandler {Logger logger = LoggerFactory.getLogger(MyExceptionHandler.class);@ResponseBody@ExceptionHandler(BindException.class)public TestExceptionBody exceptionHandler(BindException bindException) {try {//這里獲取的的exceptionMessage 就是@NotEmpty(message = "姓名不能為空")中的messageString exceptionMessage = Objects.requireNonNull(bindException.getBindingResult().getFieldError()).getDefaultMessage();//自定義異常對象TestExceptionBody中自定義的message方法return TestExceptionBody.message(exceptionMessage);} catch (Exception e) {logger.error(e.toString());return TestExceptionBody.error();}}
}

區別
@NotEmpty用到集合香一些
@NotBlank用到String真香
@NotNull用到基本類型香一些
看似@NotEmpty更強大,其實有一個細微區別。
加了@NotBlank還能判定String類型中的空字符串,比如“ ”也是不會通過校驗的。
@NotNull,只判null,基本類型會好很多

綜述建議:
String 類型用@NotBlank
基本類型用@NotNull
其他類型用@NotEmpty
?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/163224.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/163224.shtml
英文地址,請注明出處:http://en.pswp.cn/news/163224.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

露營管理系統預約小程序效果如何

旅游經濟已經復蘇&#xff0c;并且市場規模增速加快&#xff0c;近一年來遠途/周邊游客戶增多&#xff0c;不少旅游景區在節假日常常面對客流爆滿現象。同時露營作為近幾年突然火熱的項目&#xff0c;其需求也是日漸上升。 然而在高需求的同時&#xff0c;我們也看到露營經營痛…

【數組棧】實現

目錄 棧的概念及其結構 棧的實現 數組棧 鏈式棧 棧的常見接口實現 主函數Test.c 頭文件&函數聲明Stack.h 頭文件 函數聲明 函數實現Stack.c 初始化SLInit 擴容Createcapacity 壓棧STPush 出棧STPop 棧頂元素STTop 判斷棧是否為空STempty 棧內元素個數STSzi…

Mysql中join on中的like使用

1、使用mysql中的函數CONCAT(str1,str2,…) 返回結果為連接參數產生的字符串。如有任何一個參數為NULL &#xff0c;則返回值為 NULL。 SELECT * FROM Table1 INNER JOIN Table2 ON Table1.col LIKE CONCAT(%, Table2.col, %) 2、放棄使用join語句 SELECT * FROM Table1, T…

使用sqlserver備份還原,復制遷移數據庫

文章目錄 前言一、備份數據庫二、還原數據庫三、其他 前言 當初學sqlserver復制數據庫的時候&#xff0c;老師只教了右鍵數據庫生成sql腳本&#xff0c;沒說數據庫非常大的時候咋搞啊&#xff0c;分離數據庫復制一份后在附加上去太危險了 百度一下備份還原數據庫針對小白的資料…

docker安裝mysql及主從配置

創建mysql配置文件&#xff1a;my.cnf 主庫配置&#xff1a; [client] ## 默認編碼格式 default-character-setutf8mb4 [mysqld] ## 設置server-id&#xff0c;同一局域網中需要唯一 server-id101 ## 設置編碼格式 character-set-serverutf8mb4 ## 允許最大連接數 max_conne…

Redis key鍵

Redis 是一種鍵值&#xff08;key-value&#xff09;型的緩存型數據庫&#xff0c;它將數據全部以鍵值對的形式存儲在內存中&#xff0c;并且 key 與 value 一一對應。這里的 key 被形象的稱之為密鑰&#xff0c;Redis 提供了諸多操作這把“密鑰”的命令&#xff0c;從而實現了…

財報解讀:電商GMV增長30%后,快手將堅守本地生活?

快手逐漸講好了其高質量成長的故事。 根據財報&#xff0c;快手三季度業績超出預期&#xff0c;其中&#xff0c;營收279.5億元&#xff0c;同比增長20.8%&#xff1b;調整后凈利潤31.7億元&#xff0c;同比扭虧為盈。 而聯系市場環境來看&#xff0c;三季度廣告、電商市場較…

超詳細的pytest玩轉HTML報告:修改、漢化和優化

前言 Pytest框架可以使用兩種測試報告&#xff0c;其中一種就是使用pytest-html插件生成的測試報告&#xff0c;但是報告中有一些信息沒有什么用途或者顯示的不太好看&#xff0c;還有一些我們想要在報告中展示的信息卻沒有&#xff0c;最近又有人問我pytest-html生成的報告&a…

javascript Math相關計算取值屬性方法

*向上取整【只要有小數就+1】 Math.ceil(3.14); // 4 *向下取整【有小數就舍棄】 Math.floor(3.14); // 3 parseInt(3.14); // 3 // 常用于字符串類型的數字轉為十進制的數據 四舍五入【小數點后部分】 Math.round(11.5)); //12 Math.round(-11.5)); //-11 取兩數…

6-使用nacos作為注冊中心

本文講解項目中集成nacos&#xff0c;并將nacos作為注冊中心使用的過程。本文不涉及nacos的原理。 1、項目簡介 以一個演示項目為例&#xff0c;項目包含三個服務&#xff0c;調用及依賴如下圖&#xff1a; 由圖中可以看出&#xff0c;coupon-customer-serv為服務的消費者&a…

基于element自動表格

需求是根據JSON文件生成表格&#xff0c;包含配置和自動props屬性以及過濾器&#xff1b; 數據示例&#xff1a; 表格設置&#xff1a; /*** 表格表頭信息* chineseToPinYin: 這是封裝的根據中文漢字轉換為拼音的方法* prop: 表頭字段名* filter: 數據過濾器* label: 表頭顯示…

最長連續序列【中等】

leetcode鏈接 給定一個未排序的整數數組 nums &#xff0c;找出數字連續的最長序列&#xff08;不要求序列元素在原數組中連續&#xff09;的長度。 請你設計并實現時間復雜度為 O(n) 的算法解決此問題。 示例 1&#xff1a;輸入&#xff1a;nums [100,4,200,1,3,2] 輸出&am…

『new Date 在 IOS 失效 の bug』

問題&#xff1a;new Date()在安卓下正常&#xff0c;在IOS下顯示不出來。 原因&#xff1a;在IOS下&#xff0c;new Date(“2000-2-22 00:10”),返回的是undefined&#xff0c;因為IOS不支持這種類型格式。 解決&#xff1a;更換下格式&#xff1a;new Date(“2000/2/22”) …

類初始化,類加載,類加載器

類初始化&#xff0c;類加載&#xff0c;類加載器 1. 類加載1.1. 類的加載1.2. 類的鏈接1.2.1. 驗證1.2.2. 準備1.2.3. 解析 2. 類加載器2.1. 類加載器分為四種&#xff1a;前三種為虛擬機自帶的加載器。2.2. 類加載有三種方式&#xff1a;2.3. **JVM類加載機制**2.4. 雙親委派…

GeoTrust通配符證書:保護您的網站安全

GeoTrust通配符 SSL證書是一種特殊的 SSL 證書類型&#xff0c;它可以同時為您的主域名及其所有子域提供安全保護。無論您有多少個不同的子域需要保障&#xff0c;都可以通過單一的 GeoTrust 通配符 SSL 證書輕松實現&#xff0c;極大地簡化了管理流程并降低了成本。 此外&…

1688商品詳情數據接口(1688.item_get)

1688商品詳情數據接口是一種程序化的接口&#xff0c;通過這個接口&#xff0c;商家或開發者可以使用自己的編程技能&#xff0c;對1688平臺上的商品信息進行查詢、獲取和更新。這個接口允許商家根據自身的需求&#xff0c;獲取商品的詳細信息&#xff0c;例如價格、庫存、描述…

JUC(Java Util Concurrent)多線程并發庫

JUC&#xff08;Java Util Concurrent&#xff09;是Java中用于編寫多線程并發程序的庫。開發過程中使用JUC主要有以下幾個好處&#xff1a; 1. 提高程序性能&#xff1a;使用JUC可以實現多線程并發執行&#xff0c;充分利用多核CPU&#xff0c;提高程序的性能。 2. 簡化代碼…

群暉NAS搭建WebDav服務做文件共享,可隨時隨地遠程訪問

文章目錄 1. 在群暉套件中心安裝WebDav Server套件1.1 安裝完成后&#xff0c;啟動webdav服務&#xff0c;并勾選HTTP復選框 2. 局域網測試WebDav服務2.1 下載RaiDrive客戶端2.2 打開RaiDrive&#xff0c;設置界面語言可以選擇中文2.3 點擊添加按鈕&#xff0c;新建虛擬驅動區2…

從事軟件測試8年,對業務測試人員的一些思考

自從事測試工作八年多以來&#xff0c;經歷過三個部門多條業務線&#xff0c;也經歷過測試轉型再回到測試&#xff0c;在此過程中對測試工作和角色的認知也逐步有些思考&#xff0c;想把這些思考分享給大家&#xff0c;希望為業務測試同學提供一些有價值的思路。 同時&#xff…