㈠ SpringMVC的參數校驗以及@Valid相關註解的使用和自定義
SpringMVC的基本參數校驗涉及使用`@RequestParam`註解來控制請求參數。在編寫控制層介面時,對前端或介面訪問者的參數進行校驗,可以避免代碼重復,減少資源浪費和提升代碼的美觀度。通過使用`@RequestParam`,當訪問介面時沒有傳遞該參數,SpringMVC會拋出異常,此時可以使用全局錯誤處理機制進行統一捕獲和處理。例如,可以聲明參數類型為引用類型,如`Long`,這樣該參數就不是必須的。
`@RequestParam`註解具有幾個可用屬性,包括`name`(指定參數名稱,默認為介面定義時的參數名,但可通過該屬性覆蓋重命名),`required`(默認為`true`,表示參數為必傳,若為`false`則該參數可選),`defaultValue`(當參數未傳遞時提供默認值)。
在SpringMVC中,可藉助jsR-303驗證框架實現參數的校驗。Spring Boot默認使用Hibernate validator進行驗證,只需在方法參數上使用`@Valid`註解,Spring Boot將自動對參數對象進行校驗,並將校驗結果存儲在`BindingResult`對象中。
JSR-303定義了一系列註解用於驗證Bean屬性,如`@Null`、`@NotNull`、`@NotBlank`、`@NotEmpty`、`@Size`(支持字元串、集合)以及數值校驗註解如`@Min`、`@Max`、`@Digits`和`@Range`。對於字元串類型,使用`@Email`驗證是否為郵件格式,`@Pattern`則用於驗證字元串是否符合正則表達式規則。
在實現驗證時,需要在類欄位上標注對應的控制註解,然後在請求參數處標注`@Valid`聲明參數需要校驗。框架將把校驗結果放在`BindingResult`對象中,該對象包含了所有驗證結果。通過`hasErrors`方法判斷驗證是否通過,`getAllErrors`方法獲取所有錯誤信息,通常返回`FieldError`列表。若未聲明`BindingResult`參數,SpringMVC將拋出異常,此時可以採用全局異常處理。
對於介面參數內部引用其他對象的校驗,只需在引用欄位上添加`@Valid`註解,框架將自動對內部對象執行校驗。若需要根據不同介面定製校驗規則,可以使用`@Validate`註解來分組校驗,通過新建介面用於分組並配置所屬的組。例如,在實體類中創建介面用於分組,每個校驗註解配置所屬的組,介面定義處使用`@Validate`註解並指定需要的介面分組。
另外,實現自定義校驗註解,如校驗貨物庫存是否低於最小值。自定義註解格式與普通註解相似,指定驗證規則,如庫存不能低於`{min}`個。通過實現`@Constraint`註解來說明需要哪個類來驗證註解,定義`message`屬性用於創建錯誤信息,`groups`屬性指定驗證規則分組,`payload`屬性定義驗證的有效負載。最後,創建一個驗證類來實現註解驗證邏輯。
㈡ Spring JSR303驗證,為什麼在頁面上使用 form:error顯示不了錯誤信息
說明你對jsr的自定義類型轉化器ConversionService沒有了解,你雖然model裡面已經添加了jsp中的modelAttribute的模型,但是你modelAttribute中的名字沒有對應你的PortalUser類中的名字,應該jsp中modelAttribute=「」portalUser「」,你就可以解決你的問題
備註:在jsp中的modelAttribute必須要modelAttribute="POJO類名小寫",原理和springmvc.xml中配置conversionService 的默認bean一樣意思
㈢ SpringBoot JSR-303 + AOP 自定義註解校驗參數
SpringBoot OAuth2.0集成簡訊驗證碼登錄機制,提供安全的授權認證方式。
實現這一功能,確保傳入的參數合法性至關重要。JSR-303和AOP技術的結合,為參數校驗提供了強大支持。
引入AOP機制,通過配置參數為空校驗,確保簡訊介面的參數完整。簡訊發送過程由AOP切面控制,優化了程序處理邏輯。
啟動服務並測試,通過訪問指定URL驗證簡訊發送功能,如訪問`localhost:7000/api/v1/sms/send?phone=&type=sms_login`。
自定義註解`ValueIn`的創建,對特定欄位進行約束,實現更加靈活的校驗邏輯。使用`SmsCodeEnum`枚舉類定義簡訊類型,進一步豐富功能。
重新啟動服務並進行測試,確保所有功能按預期運行。
源碼地址:[江景/moose],歡迎訪問查看實現細節。