spring-boot-starter-validation是什么Validation參數校驗使用概要

spring-boot-starter-validation是什么&Validation參數校驗使用概要

      • 來源
      • @Valid和@Validated的用法(區別)
      • 引入依賴
      • @Valid和@Validated的用法

在日常的項目開發中,為了防止非法參數對業務造成的影響,需要對接口的參數做合法性校驗,例如在創建用戶時,需要效驗用戶的賬號名稱不能輸入中文與特殊字符,手機號、郵箱格式是否準確。按照原始的處理邏輯需要對每個接口中的參數進行 if/else 處理,如果這樣開發,后期代碼難以維護,可讀性極差。

為了解決上述問題,validation框架誕生了,代碼量大大減少,參數的效驗不再穿插業務邏輯代碼中,代碼美觀又易于維護。

來源

@Valid 是 JSR303 聲明的,JSR是Java Specification Requests的縮寫,其中 JSR303 是JAVA EE 6 中的一項子規范,叫做 Bean Validation,為 JavaBean 驗證定義了相應的元數據模型和 API,需要注意的是,JSR 只是一項標準,它規定了一些校驗注解的規范,但沒有實現,

而 Hibernate validation 對其進行實現。

Spring Validation 驗證框架對參數的驗證機制提供了@Validated(Spring JSR-303規范,是標準JSR-303的一個變種)。

@Valid和@Validated的用法(區別)

二者主要作用在于 都作為標準JSR-303規范,在檢驗Controller的入參是否符合規范時,使用@Validated或者@Valid在基本驗證功能上沒有太多區別。
但是在分組、注解地方、嵌套驗證等功能上兩個有所不同:
在這里插入圖片描述

@Valid:
@Valid注解用于校驗,所屬包為:javax.validation.Valid。

用在方法入參上無法單獨提供嵌套驗證功能。能夠用在成員屬性(字段)上,提示驗證框架進行嵌套驗證。能配合嵌套驗證注解@Valid進行嵌套驗證。

@Validated:
@Validated是@Valid 的一次封裝,是Spring提供的校驗機制使用

用在方法入參上無法單獨提供嵌套驗證功能。不能用在成員屬性(字段)上,也無法提示框架進行嵌套驗證。能配合嵌套驗證注解@Valid進行嵌套驗證。

關于@Valid和@Validated的使用,可以參考我另一篇文章!

引入依賴

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><version>2.3.12.RELEASE</version>
</dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.10</version>
</dependency>

注:從 boot-2.3.x開始,spring-boot-starter-web不再引入 spring-boot-starter-validation,所以需要額外手動引入validation依賴,而 2.3之前的版本只需要引入 web 依賴。

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId><version>2.3.12.RELEASE</version>
</dependency><!-- <dependency><groupId>org.hibernate.validator</groupId><artifactId>hibernate-validator</artifactId><version>6.0.18.Final</version><scope>compile</scope>
</dependency>-->

以上兩個依賴都是可以實現功能的。hibernate-validator、spring-boot-starter-validation底層都引入了 jakarta.validation-api依賴。

@Valid和@Validated的用法

由于之前專門寫過這方面博文,所以 在此就不重復!

點擊跳轉我另一篇文章–【優雅的參數驗證@Validated】@Validated參數校驗的使用及注解詳解——你還在用if做條件驗證?

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

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

相關文章

基于Docker安裝Mysql:5.5

一、拉取鏡像 sudo docker pull mysql:5.5二、啟動mysql鏡像 1. 創建MySQL的conf目錄和data目錄 mkdir -p /home/docker/mysql/conf /home/docker/mysql/data2. 利用鏡像創建容器 sudo docker run --restartalways -d --name mysql -v /home/docker/mysql/conf/my.cnf:/etc…

系統設計-微服務架構

典型的微服務架構圖 下圖展示了一個典型的微服務架構。 負載均衡器&#xff1a;它將傳入流量分配到多個后端服務。CDN&#xff08;內容交付網絡&#xff09;&#xff1a;CDN 是一組地理上分布的服務器&#xff0c;用于保存靜態內容以實現更快的交付。客戶端首先在 CDN 中查找內…

methods

類型&#xff1a;{ [key: string]: Function } 詳細&#xff1a; methods 將被混入到 Vue 實例中。可以直接通過 VM 實例訪問這些方法&#xff0c;或者在指令表達式中使用。方法中的 this 自動綁定為 Vue 實例。 注意&#xff0c;不應該使用箭頭函數來定義 method 函數 (例如…

臨床骨科常用的肩關節疾病量表,醫生必備!

根據骨科醫生的量表使用情況&#xff0c;常笑醫學整理了臨床骨科常用的肩關節疾病量表&#xff0c;為大家分享臨床常見的肩關節疾病量表評估內容&#xff0c;均支持量表下載和在線使用&#xff0c;建議收藏&#xff01; 1.臂、肩、手功能障礙&#xff08;disabilites of the ar…

useradd 在Linux原生應用開發過程中的簡單應用

useradd命令是用于在Linux系統中創建新用戶的命令。它可以創建一個新用戶&#xff0c;并設置該用戶的屬性、家目錄、默認shell等。useradd命令實際上是一個包裝了一系列系統調用的高級命令。 在Linux系統中&#xff0c;用戶信息存儲在/etc/passwd文件中。當執行useradd命令時&…

flstudio21破解漢化版2024最新水果編曲使用教程

? 如果你一直夢想制作自己的音樂(無論是作為一名制作人還是藝術家)&#xff0c;你可能會想你出生在這個時代是你的幸運星。這個水果圈工作室和上一版之間的改進水平確實令人欽佩。這僅僅是FL Studio 21所提供的皮毛。你的音樂項目的選擇真的會讓你大吃一驚。你以前從未有過這…

ChatGPT的常識

什么是ChatGPT&#xff1f; ChatGPT是一個基于GPT模型的聊天機器人&#xff0c;GPT即“Generative Pre-training Transformer”&#xff0c;是一種預訓練的語言模型。ChatGPT使用GPT-2和GPT-3兩種模型來生成自然語言響應&#xff0c;從而與人類進行真實的對話。 ChatGPT的設計…

2023年全球軟件開發大會(QCon廣州站2023)-核心PPT資料下載

一、峰會簡介 本次峰會包含&#xff1a;泛娛樂時代的邊緣計算與通訊、穩定性即生命線、下一代軟件架構、出海的思考、現代數據架構、AGI 與 AIGC 落地、大前端技術探索、編程語言實戰、DevOps vs 平臺工程、新型數據庫、AIGC 浪潮下的企業出海、AIGC 浪潮下的效能智能化、數據…

【池式組件】線程池的原理與實現

線程池的原理與實現 線程池簡介1.線程池1.線程池2.數量固定的原因3.線程數量如何確定4.為什么需要線程池5.線程池結構 線程池的實現數據結構設計1.任務結構2.任務隊列結構3.線程池結構 接口設計 線程池的應用reactorredis 中線程池skynet 中線程池 線程池簡介 1.線程池 1.線程…

第7課 SQL入門之創建計算字段

文章目錄 7.1 計算字段7.2 拼接字段使用別名 7.3 執行算術計算 這一課介紹什么是計算字段&#xff0c;如何創建計算字段&#xff0c;以及如何從應用程序中使用別名引用它們。 7.1 計算字段 存儲在數據庫表中的數據一般不是應用程序所需要的格式&#xff0c;下面舉幾個例子。 …

前端Excel導出實用方案(完整源碼,可直接應用)

目錄 前言&#xff1a; 技術選型&#xff1a; 主要功能點&#xff1a; 核心代碼&#xff1a; 完整代碼&#xff1a; 開發文檔 前言&#xff1a; 在前后端分離開發為主流的時代&#xff0c;很多時候&#xff0c;excel導出已不再由后端主導&#xff0c;而是把導出的操作移…

關于鎖的粒度問題——面試

鎖的粒度劃分主要有三種&#xff1a;表級鎖、頁級鎖和行鎖 1.表級鎖&#xff1a; 對整張表加鎖&#xff0c;粒度最大&#xff0c;加鎖的并發度最低&#xff0c;會導致其他事務無法訪問該表&#xff0c;只有當前事務提交或者回滾后才能釋放鎖。表級鎖適用于對表進行全表操作的場…

DeepIn,UOS統信專業版安裝運行Java,JavaFx程序

因為要適配國產統信UOS系統&#xff0c;要求JavaFx程序能簡便雙擊運行&#xff0c;由于網上UOS開發相關文章少&#xff0c;多數文章沒用&#xff0c;因此花了不少時間&#xff0c;踩了不少坑&#xff0c;下面記錄一些遇到的問題&#xff0c;我的程序環境是jdk1.8&#xff0c;為…

【K8s】Kubernetes CRD 介紹(控制器)

文章目錄 CRD 概述1. 操作CRD1.1 創建 CRD1.2 操作 CRD 2. 其他筆記2.1 Kubectl 發現機制2.2 校驗 CR2.3 簡稱和屬性 3. 架構設計3.1 控制器概覽 參考 CRD 概述 CR&#xff08;Custom Resource&#xff09;其實就是在 Kubernetes 中定義一個自己的資源類型&#xff0c;是一個具…

如何為 3D 模型制作紋理的最佳方法

在線工具推薦&#xff1a; 3D數字孿生場景編輯器 - GLTF/GLB材質紋理編輯器 - 3D模型在線轉換 - Three.js AI自動紋理開發包 - YOLO 虛幻合成數據生成器 - 三維模型預覽圖生成器 - 3D模型語義搜索引擎 您可以通過不同的方式為 3D 模型創建 3D 紋理。下面我們將介紹為 3D …

《opencv實用探索·十四》VideoCapture播放視頻和視像頭調用

1、VideoCapture播放視頻 #include <opencv2/opencv.hpp> #include <iostream>using namespace std; using namespace cv;int main() {// 定義相關VideoCapture對象VideoCapture capture;// 打開視頻文件capture.open("1.avi");// 判斷視頻流讀取是否正…

Python os模塊及用法

os 模塊代表了程序所在的操作系統&#xff0c;主要用于獲取程序運行所在操作系統的相關信息。 在 Python 的交互式解釋器中先導入 os 模塊&#xff0c;然后輸入 os.__all__ 命令&#xff08;__all__ 變量代表了該模塊開放的公開接口&#xff09;&#xff0c;即可看到該模塊所包…

Linux DataEase數據可視化分析工具本地部署與遠程訪問

文章目錄 前言1. 安裝DataEase2. 本地訪問測試3. 安裝 cpolar內網穿透軟件4. 配置DataEase公網訪問地址5. 公網遠程訪問Data Ease6. 固定Data Ease公網地址 前言 DataEase 是開源的數據可視化分析工具&#xff0c;幫助用戶快速分析數據并洞察業務趨勢&#xff0c;從而實現業務…

ExecutorService介紹

參考&#xff1a;https://blog.csdn.net/fwt336/article/details/81530581 前言 在開發中為了提高系統的響應速度和處理能力會使用到多線程&#xff0c;但線程的創建和釋放&#xff0c;需要占用不小的內存和資源。如果每次需要使用線程時&#xff0c;都new 一個Thread的話&…

【LeetCode】2723. 兩個 Promise 對象相加

兩個 Promise 對象相加 題目題解 題目 給定兩個 promise 對象 promise1 和 promise2&#xff0c;返回一個新的 promise。promise1 和 promise2 都會被解析為一個數字。返回的 Promise 應該解析為這兩個數字的和。 示例 1&#xff1a; 輸入&#xff1a; promise1 new Promise…