Spring Validation參數校驗

Spring Validation是Spring框架中用于數據校驗的核心模塊,通過注解簡化數據校驗邏輯。

1. 依賴引入(SpringBoot項目)

Spring Boot項目:自動包含spring-boot-starter-validation

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

2. 基本使用

在Spring MVC的Controller中使用@Valid和@Validated觸發校驗。

示例代碼:

@PostMapping("/users")
public ResponseEntity<?> createUser(@RequestBody @Valid User user, BindingResult result) {if (result.hasErrors()) {// 處理校驗錯誤return ResponseEntity.badRequest().body(result.getAllErrors());}// 保存用戶return ResponseEntity.ok(userService.save(user));
}
  • @Valid:觸發校驗
  • @Validated:Spring的擴展,支持分組校驗
  • BindingResult:保存校驗結果,需緊跟被校驗參數

3. 常用校驗注解

以下是Bean Validation內置的校驗注解:

注解說明
@NotNull值不能為null
@NotEmpty字符串/集合不能為空
@NotBlank字符串必須包含非空格字符
@Size(min, max)字符串/集合長度在范圍內
@Min(value)數字最小值
@Max(value)數字最大值
@Email校驗郵箱格式
@Pattern(regexp)正則表達式匹配
@Positive必須為正數
@Future日期必須是未來時間

示例實體類:

public class User {@NotBlank(message = "用戶名不能為空")private String username;@Size(min = 6, max = 20, message = "密碼長度需在6-20位")private String password;@Email(message = "郵箱格式不正確")private String email;// Getters and Setters
}

4.分組校驗

通過分組實現不同場景的差異化校驗規則。

定義分組接口:

public interface CreateGroup {}
public interface UpdateGroup {}

在實體中使用分組:

public class User {@Null(groups = CreateGroup.class, message = "創建時ID必須為空")@NotNull(groups = UpdateGroup.class, message = "更新時ID不能為空")private Long id;// 其他字段...
}

在Controller中指定分組:

@PostMapping("/users")
public ResponseEntity<?> createUser(@Validated(CreateGroup.class) @RequestBody User user) {// ...
}

5. 自定義校驗

步驟1:定義注解

@Target({FIELD, PARAMETER})
@Retention(RUNTIME)
@Constraint(validatedBy = PhoneValidator.class)
public @interface Phone {String message() default "手機號格式不正確";Class<?>[] groups() default {};Class<? extends Payload>[] payload() default {};
}

步驟2:實現校驗邏輯

public class PhoneValidator implements ConstraintValidator<Phone, String> {@Overridepublic boolean isValid(String phone, ConstraintValidatorContext context) {return phone != null && phone.matches("^1[3-9]\\d{9}$");}
}

步驟3:使用自定義注解

public class User {@Phoneprivate String phone;
}

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

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

相關文章

《AI大模型趣味實戰》No2 : 快速搭建一個漂亮的AI家庭網站-相冊/時間線/日歷/多用戶/個性化配色(中)

快速搭建一個漂亮的AI家庭網站-相冊/時間線/日歷/多用戶/個性化配色(中) 摘要 在上一篇文章中&#xff0c;我們介紹了如何搭建一個基礎的家庭網站&#xff08;V1.0版本&#xff09;&#xff0c;包含了用戶管理、相冊管理、時間線和日歷等功能。本文將繼續深入&#xff0c;詳細…

pythonSTL---sys

sys 是 Python 標準庫中的一個內置模塊&#xff0c;它提供了許多與 Python 解釋器和系統環境進行交互的功能。 sys方法 1. 導入 sys 模塊 在使用 sys 庫的功能之前&#xff0c;需要先導入它&#xff1a; import sys2. 命令行參數 (sys.argv) sys.argv 是一個包含命令行參數…

軟件需求分類、需求獲取(高軟46)

系列文章目錄 軟件需求分類&#xff0c;需求獲取 文章目錄 系列文章目錄前言一、軟件需求二、獲取需求三、真題總結 前言 本節講明軟件需求分類、需求獲取的相關知識。 一、軟件需求 二、獲取需求 三、真題 總結 就是高軟筆記&#xff0c;大佬請略過&#xff01;

Zabbix7.0+DeepSeek大模型實現人工智能告警分析

一、方案概述 本方案基于Zabbix7.0監控系統,通過底層webhook腳本機制集成Deepseek做故障分析提供解決方案,構建智能化運維體系。 其核心架構包括: Zabbix監控平臺:負責實時監控和告警觸發 Webhook接口:實現告警信息的傳遞 Deepseek AI平臺:提供故障智能分析能力 二、…

CPU相關:實時cpu信息接口

[rootxxx ~]# cat /proc/cpuinfo #通過實時cpu信息接口查看cpu信息

Certbot實現SSL免費證書自動續簽(CentOS 7版 + Docker部署的nginx)

前置安裝&#xff0c;可參考Certbot實現SSL免費證書自動續簽&#xff08;CentOS 7 nginx/apache&#xff09; 如果是通過 Docker 運行 Nginx&#xff0c; certbot 無法直接檢測到本地的 Nginx 配置。解決方案是 使用 standalone 模式 或 掛載 Webroot 方式獲取 SSL 證書&…

A SURVEY ON POST-TRAINING OF LARGE LANGUAGE MODELS——大型語言模型的訓練后優化綜述——第2部分

3、微調&#xff08;上一部分內容&#xff09; 4、LLMs的對齊 大型語言模型&#xff08;LLMs&#xff09;中的對齊涉及引導模型輸出以符合人類預期和偏好&#xff0c;特別是在安全關鍵或用戶面對的應用程序中。本章討論了實現對齊的三個主要范式&#xff1a; 帶有反饋的人工…

熱key探測技術架構設計與實踐

參考&#xff1a; 得物熱點探測技術架構設計與實踐 Redis數據傾斜與JD開源hotkey源碼分析揭秘 京東熱點檢測 HotKey 學習筆記 hotkey: 京東App后臺中間件&#xff0c;毫秒級探測熱點數據&#xff0c;毫秒級推送至服務器集群內存&#xff0c;大幅降低熱key對數據層查詢壓力 …

Windows 環境圖形化安裝 Oracle 23ai

文章目錄 Windows 環境安裝23ai下載Oracle 23ai安裝包安裝安裝詳細圖形界面連接Oracle 23ai 安裝過程中遇到的錯誤安裝過其他版本數據庫&#xff0c;設置了ORACLE_HOME或 TNS_ADMIN解決方法 無法訪問Windows Installer Serviece (error 1719)解決方法 其他注意 參考&#xff1a…

RabbitMQ支持的復雜的消息交換模式

RabbitMQ支持多種復雜的消息交換模式&#xff0c;這些模式通過不同的交換機類型和隊列特性實現&#xff0c;能夠滿足多樣化的業務需求。以下是RabbitMQ支持的主要復雜消息交換模式&#xff1a; 1. Direct Exchange&#xff08;直連交換機&#xff09; 直連交換機根據消息的路由…

基于SpringBoot3+Druid數據庫連接池與外部PostgreSQL的Kubernetes Pod YAML全解析

說明 一個基于Spring Boot 3 Druid 外部PostgreSQL的Kubernetes Pod YAML詳細解析&#xff0c;包含最佳實踐和關鍵配置說明&#xff1a; YAML apiVersion: apps/v1 kind: Deployment metadata:name: springboot-applabels:app: springboot-app spec:replicas: 2selector:ma…

Android 全局工具類 AppHolder:高效管理 Application 和 Activity

引言 介紹 AppHolder 的作用&#xff1a;全局管理 Application 和 Activity&#xff0c;簡化開發。適用場景&#xff1a;需要全局上下文和生命周期管理的場景。 功能特性 全局上下文管理。Activity 生命周期監聽。Fragment 生命周期監聽&#xff08;可選&#xff09;。應用狀態…

PyTorch 深度學習實戰(14):Deep Deterministic Policy Gradient (DDPG) 算法

在上一篇文章中&#xff0c;我們介紹了 Proximal Policy Optimization (PPO) 算法&#xff0c;并使用它解決了 CartPole 問題。本文將深入探討 Deep Deterministic Policy Gradient (DDPG) 算法&#xff0c;這是一種用于連續動作空間的強化學習算法。我們將使用 PyTorch 實現 D…

【深度學習與大模型基礎】第5章-線性相關與生成子空間

線性相關是指一組向量中&#xff0c;至少有一個向量可以表示為其他向量的線性組合。具體來說&#xff0c;對于向量組 v1,v2,…,vn&#xff0c;如果存在不全為零的標量 c1,c2,…,cn使得&#xff1a; c1v1c2v2…cnvn0 則稱這些向量線性相關。否則&#xff0c;它們線性無關。 舉…

【Agent實戰】貨物上架位置推薦助手(RAG方式+結構化prompt(CoT)+API工具結合ChatGPT4o能力Agent項目實踐)

本文原創作者:姚瑞南 AI-agent 大模型運營專家,先后任職于美團、獵聘等中大廠AI訓練專家和智能運營專家崗;多年人工智能行業智能產品運營及大模型落地經驗,擁有AI外呼方向國家專利與PMP項目管理證書。(轉載需經授權) 目錄 結論 效果圖示 1.prompt 2. API工具封…

Go語言入門基礎詳解

一、語言歷史背景 Go語言由Google工程師Robert Griesemer、Rob Pike和Ken Thompson于2007年設計&#xff0c;2009年正式開源。設計目標&#xff1a; 兼具Python的開發效率與C的執行性能內置并發支持&#xff08;goroutine/channel&#xff09;簡潔的類型系統現代化的包管理跨…

HarmonyOS NEXT開發進階(十二):build-profile.json5 文件解析

文章目錄 一、前言二、Hvigor腳本文件三、任務與任務依賴圖四、多模塊管理4.1 靜態配置模塊 五、分模塊編譯六、配置多目標產物七、配置APP多目標構建產物八、定義 product 中包含的 target九、拓展閱讀 一、前言 編譯構建工具DevEco Hvigor&#xff08;以下簡稱Hvigor&#x…

基于SSM + JSP 的圖書商城系統

基于SSM的圖書商城 網上書城、圖書銷售系統、圖書銷售平臺 &#xff5c;Java&#xff5c;SSM&#xff5c;HTML&#xff5c;JSP&#xff5c; 項目采用技術&#xff1a; ①&#xff1a;開發環境&#xff1a;IDEA、JDK1.8、Maven、Tomcat ②&#xff1a;技術棧&#xff1a;Java、…

色板在數據可視化中的創新應用

色板在數據可視化中的創新應用&#xff1a;基于色彩感知理論的優化實踐 引言 在數據可視化領域&#xff0c;色彩編碼系統的設計已成為決定信息傳遞效能的核心要素。根據《Nature》期刊2024年發布的視覺認知研究&#xff0c;人類大腦對色彩的識別速度比形狀快40%&#xff0c;色…

K8S學習之基礎二十七:k8s中daemonset控制器

k8s中DaemonSet控制器 ? DaemonSet控制器確保k8s集群中&#xff0c;所有節點都運行一個相同的pod&#xff0c;當node節點增加時&#xff0c;新節點也會自動創建一個pod&#xff0c;當node節點從集群移除&#xff0c;對應的pod也會自動刪除。刪除DaemonSet也會刪除創建的pod。…