Java實戰:Spring Boot中各類參數校驗機制

引言

在開發Web應用程序時,對客戶端傳入的參數進行有效校驗是保證系統安全性和穩定性的重要環節。Spring Boot作為一個現代化的Java開發框架,提供了多種參數校驗的方法和工具,以滿足不同場景下的需求。本文將深入探討Spring Boot中實現各種參數校驗的技術手段,包括JSR 303/349 Bean Validation、Spring MVC自帶的注解校驗以及自定義校驗器,并輔以具體示例,幫助我們掌握在實際項目中如何靈活運用這些校驗機制。

一、JSR 303/349 Bean Validation

1. 簡介

JSR 303(Java Specification Request 303)提出了Java Bean屬性校驗的標準,后續的JSR 349對其進行了擴展。通過引入javax.validation包中的注解,如@NotNull@Size@Pattern等,開發者可以直接在實體類的屬性上聲明校驗規則。

2. 示例

import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;public class UserDto {@NotNull(message = "用戶名不能為空")@Size(min = 3, max = 20, message = "用戶名長度應在3到20個字符之間")private String username;@NotNull(message = "密碼不能為空")@Min(value = 6, message = "密碼長度至少為6個字符")private String password;// getter/setter...
}

在Spring Boot中,只需要開啟@Valid注解支持,即可自動啟用JSR 303/349校驗:

@PostMapping("/users")
public ResponseEntity<?> createUser(@Valid @RequestBody UserDto userDto) {// 如果校驗失敗,Spring MVC會自動拋出MethodArgumentNotValidException異常// 此處省略業務邏輯...
}

二、Spring MVC自帶的注解校驗

1. 簡介

Spring MVC本身也提供了一系列注解用于參數校驗,如@RequestParam@PathVariable等可以附加@NotNull等約束條件,實現對HTTP請求參數的校驗。

2. 示例

@GetMapping("/users/{id}")
public ResponseEntity<?> getUser(@PathVariable @NotNull(message = "用戶ID不能為空") Long id) {// 校驗邏輯由Spring MVC處理// 此處省略業務邏輯...
}@PostMapping("/login")
public ResponseEntity<?> login(@RequestParam @Size(min = 3, max = 20, message = "用戶名長度應在3到20個字符之間") String username,@RequestParam @NotNull(message = "密碼不能為空") String password) {// 校驗邏輯由Spring MVC處理// 此處省略業務邏輯...
}

三、自定義校驗注解與校驗器

1. 簡介

對于復雜的業務場景,標準的注解可能無法滿足需求,這時就需要自定義校驗注解和校驗器。

2. 示例

首先,創建自定義注解:

@Target({ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = PasswordStrengthValidator.class)
public @interface PasswordStrength {String message() default "密碼強度不足";Class<?>[] groups() default {};Class<? extends Payload>[] payload() default {};
}

接著,編寫對應的校驗器:

public class PasswordStrengthValidator implements ConstraintValidator<PasswordStrength, String> {@Overridepublic boolean isValid(String password, ConstraintValidatorContext context) {// 自定義校驗邏輯,如判斷密碼是否包含數字、字母、特殊字符等// 這里僅為示例,實際邏輯請根據業務需求編寫return password != null && password.length() > 6 && containsNumber(password) && containsLetter(password);}// 輔助方法private boolean containsNumber(String s) {...}private boolean containsLetter(String s) {...}
}

最后,在實體類中使用自定義注解:

public class UserDto {// ...@PasswordStrengthprivate String password;// ...
}

四、全局異常處理與自定義錯誤響應

為了統一對參數校驗失敗的異常處理,可以自定義全局異常處理器,實現HandlerExceptionResolver接口,并對MethodArgumentNotValidException等異常進行捕獲和處理,返回統一格式的錯誤響應。

五、Spring Boot WebFlux 中的參數校驗

對于使用WebFlux開發的反應式應用,Spring Boot同樣支持參數校驗,只需在控制器方法參數上使用@Valid注解,結合Reactive的異常處理機制,實現對請求參數的校驗。

六、結論

在Spring Boot中實現參數校驗,既可以利用JSR 303/349提供的豐富注解,又可以結合Spring MVC自帶的注解以及自定義校驗注解與校驗器,靈活應對不同場景下的校驗需求。通過全局異常處理機制,可以實現優雅的錯誤響應,提升用戶體驗。在實際開發中,應根據項目特點選擇合適的校驗策略,確保系統的安全性與穩定性。

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

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

相關文章

typescript 的常用方式

文章目錄 前言一、綁定props 默認值的方式&#xff1a;withDefaults1.vue2 的props設置默認值2.vue3 的props設置默認值(1) 不設置默認值的寫法(2) 設置默認值的寫法&#xff08;分離模式&#xff09;(3) 設置默認值的寫法&#xff08;組合模式&#xff09; 二、定義一個二維數…

Matlab在同一張圖中如何加入多個圖例

根據代碼最終畫出的圖片如下&#xff1a; 其實原理很簡單&#xff0c;就是在一張figure中畫多個坐標軸&#xff0c;每個坐標軸都有對應的圖例&#xff0c;之后再將多余坐標軸隱藏&#xff0c;只保留一個即可。 代碼如下&#xff1a; clear all; close all;dd_linewidth 1;a …

maven archetype 項目原型

拓展閱讀 maven 包管理平臺-01-maven 入門介紹 Maven、Gradle、Ant、Ivy、Bazel 和 SBT 的詳細對比表格 maven 包管理平臺-02-windows 安裝配置 mac 安裝配置 maven 包管理平臺-03-maven project maven 項目的創建入門 maven 包管理平臺-04-maven archetype 項目原型 ma…

Spring學習筆記(六)利用Spring的jdbc實現學生管理系統的用戶登錄功能

一、案例分析 本案例要求學生在控制臺輸入用戶名密碼&#xff0c;如果用戶賬號密碼正確則顯示用戶所屬班級&#xff0c;如果登錄失敗則顯示登錄失敗。 &#xff08;1&#xff09;為了存儲學生信息&#xff0c;需要創建一個數據庫。 &#xff08;2&#xff09;為了程序連接數…

洛谷P1927防護傘

題目描述 據說 20122012 的災難和太陽黑子的爆發有關。于是地球防衛小隊決定制造一個特殊防護傘&#xff0c;擋住太陽黑子爆發的區域&#xff0c;減少其對地球的影響。由于太陽相對于地球來說實在是太大了&#xff0c;我們可以把太陽表面看作一個平面&#xff0c;中心定為(0,0…

C 基本語法

我們已經看過 C 程序的基本結構&#xff0c;這將有助于我們理解 C 語言的其他基本的構建塊。 C 的令牌&#xff08;Token&#xff09; C 程序由各種令牌組成&#xff0c;令牌可以是關鍵字、標識符、常量、字符串值&#xff0c;或者是一個符號。例如&#xff0c;下面的 C 語句…

30天自制操作系統(第23天)

23.1 編寫malloc 參考第22天的內容&#xff0c;在繪制窗口前先分配了150*50個字節大小的內存&#xff0c;所以導致該文件經編譯后有7.6k左右&#xff0c;能否在其中使用指針呢&#xff1f;當需要開辟空間時&#xff0c;移動指針即可。在之前的章節中也有函數memman_alloc函數可…

php源碼 單色bmp圖片取模工具 按任意方式取模 生成字節數組 自由編輯點陣

http://2.wjsou.com/BMP/index.html 想試試chatGPT4生成&#xff0c;還是要手工改 php 寫一個網頁界面上可以選擇一張bmp圖片&#xff0c;界面上就顯示這張bmp圖片&#xff0c; 點生成取模按鈕&#xff0c;在圖片下方會顯示這張bmp圖片的取模數據。 取模規則是按界面設置的&a…

Linux 的交換空間(swap)是什么?有什么用?

目錄 swap是什么&#xff1f;swap有什么用&#xff1f;swap使用典型場景如何查看你的系統是否用到交換空間呢&#xff1f;查看系統中swap in/out的情況 swap是什么&#xff1f; swap就是磁盤上的一塊區域。它和Windows系統中的交換文件作用類似&#xff0c;但是它是一段連續的…

03、MongoDB -- MongoDB 權限的設計

目錄 MongoDB 權限的設計演示前準備&#xff1a;啟動 mongodb 服務器 和 客戶端 &#xff1a;1、啟動單機模式的 mongodb 服務器2、啟動 mongodb 的客戶端 MongoDB 權限的設計1、MongoDB 的每個數據庫都可以保存用戶&#xff0c;不止admin數據庫可以保存用戶。2、保存用戶的數據…

Linux 學習筆記(8)

八、 啟動引導 1 、 Linux 的啟動流程 1) BIOS 自檢 2) 啟動 GRUB/LILO 3) 運行 Linux kernel 并檢測硬件 4) 掛載根文件系統 5) 運行 Linux 系統的第一個進程 init( 其 PID 永遠為 1 &#xff0c;是所有其它進程的父進程 ) 6) init 讀取系統引導配置文件…

GD25Q32驅動

GD25Q32是一款基于SPI的Flash芯片&#xff0c;容量為32/84M bytes。它的引腳如下&#xff1a; 該芯片支持多種SPI操作方式&#xff0c;包括&#xff1a;Standard SPI(標準SPI)、Dual SPI(雙線 SPI)和Quad SPI(四線 SPI) 。有關SPI的介紹可以參考&#xff1a; SPI通信原理-CSDN…

flutter 文字一行顯示,超出換行

因為app有多語言&#xff0c;中文和其他語言長度不一致&#xff0c;可能導致英文會很長。 中文樣式 英文樣式 代碼 Row(mainAxisAlignment: MainAxisAlignment.end,crossAxisAlignment: CrossAxisAlignment.end,children: [Visibility(visible: controller.info.fee ! null,ch…

探尋2024年國內熱門低代碼平臺排行!| 功能特點一覽

低代碼開發是一項革命性的技術&#xff0c;主要目的是盡量避免程序研發的復雜性&#xff0c;讓外行開發者也能加入到應用程序的搭建中。低代碼平臺的核心概念和構成部分通常包括用戶界面和拖拽設計、預構件和模塊、自動化工作內容與數據庫集成和擴展應用&#xff0c;應用低代碼…

web前端css基本內容

web前端css 當我們用html的語法給內容規劃布局樣式時&#xff0c;可能會出現許多個相似的內容需要運用同一種樣式&#xff0c;復制粘貼太麻煩而且如果后期要改動的話比如把許多個地方從紅色改成藍色&#xff0c;就需要一個一個改了&#xff0c;這時候就需要引入css來操作了 把…

java-使用jacob刪除指定文件夾的郵件

總結見文章最后,具體代碼如下: ActiveXComponent outlook = new ActiveXComponent("Outlook.Application");Dispatch myNamespace = Dispatch.call(outlook, "GetNamespace", "MAPI").toDispatch();//指定搜索特定的文件Dispatch allFolders =…

我耀學IT—day05-Bootstrap下拉菜單與導航

一、Bootstrap5 下拉菜單 下拉菜單是可切換的&#xff0c;是以列表格式顯示鏈接的上下文菜單。 例&#xff1a; <div class"dropdown"><button type"button" class"btn btn-primary dropdown-toggle" data-bs-toggle"dropdown&…

U盤彈出提示“該設備正在使用中”:原因與解決方案

在日常使用U盤時&#xff0c;我們可能會遇到一個問題&#xff1a;當嘗試安全彈出U盤時&#xff0c;系統提示“該設備正在使用中”。這種情況可能會讓用戶感到困惑&#xff0c;擔心數據是否安全或是否會導致U盤損壞。本文旨在探討這一現象背后的原因&#xff0c;并提供相應的解決…

【前端素材】推薦優質后臺管理系統網頁Stisla平臺模板(附源碼)

一、需求分析 1、系統定義 后臺管理系統是一種用于管理和控制網站、應用程序或系統的管理界面。它通常被設計用來讓網站或應用程序的管理員或運營人員管理內容、用戶、數據以及其他相關功能。后臺管理系統是一種用于管理網站、應用程序或系統的工具&#xff0c;通常由管理員使…

鉛冶煉作業VR虛擬現實互動培訓平臺降低實操風險

在鋼鐵工業中&#xff0c;焦爐作業是一個關鍵的環節&#xff0c;也是一項技術要求高、操作復雜的任務。傳統焦爐作業的培訓通常需要在實際的焦爐上進行&#xff0c;這不僅對學員的身體素質和心理素質提出了較高的要求&#xff0c;而且也存在一定的安全風險。基于VR虛擬現實制作…