中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Spring Boot 參數校驗的具體實現方式

發布時間:2020-10-08 06:01:47 來源:腳本之家 閱讀:170 作者:廢物大師兄 欄目:編程語言

1、背景介紹

開發過程中,后臺的參數校驗是必不可少的,所以經常會看到類似下面這樣的代碼

Spring Boot 參數校驗的具體實現方式

這樣寫并沒有什么錯,還挺工整的,只是看起來不是很優雅而已。

接下來,用Validation來改寫這段

2、Spring Boot文檔中的Validation

在Spring Boot的官網中,關于Validation只是簡單的提了一句,如下

Spring Boot 參數校驗的具體實現方式

其實,Spring Validator和Hibernate Validator是兩套Validator,可以混著用,這里我們用Hibernate Validator

3、Hibernate Validator

https://docs.jboss.org/hibernate/stable/validator/reference/en-US/html_single/#preface

4、Spring Validator

https://docs.spring.io/spring/docs/5.0.5.RELEASE/spring-framework-reference/core.html#validation

5、示例

5.1、引入spring-boot-starter-validation

Spring Boot 參數校驗的具體實現方式

5.2、定義一個對象

Spring Boot 參數校驗的具體實現方式

5.3、適用@Valid校驗,并將校驗結果放到BindingResult對象中

Spring Boot 參數校驗的具體實現方式

注意:

默認情況下,如果校驗失敗會拋javax.validation.ConstraintViolationException異常,可以用統一異常處理去對這些異常做處理An Errors/BindingResult argument is expected to be declared immediately after the model attribute5.4、看效果

Spring Boot 參數校驗的具體實現方式

Spring Boot 參數校驗的具體實現方式

如果在校驗的對象后面再加上Model對象的話,如果返回的是ModelAndView就可以將這個Model設置到其中,這樣在頁面就可以取到錯誤消息了

Spring Boot 參數校驗的具體實現方式

僅僅只是單字段校驗的話未免也太不靈活了吧,如果字段之間有關聯關系,那該如何校驗呢?答案是自定義

5.5、自定義校驗規則

https://docs.jboss.org/hibernate/stable/validator/reference/en-US/html_single/#validator-customconstraints

Spring Boot 參數校驗的具體實現方式

這里,以優惠券創建為例來演示如何自定義校驗規則

首先,優惠券表單如下(僅僅只是演示用):

Spring Boot 參數校驗的具體實現方式

這里除了自定義了兩條校驗規則之外,還用到了分組。

為什么要有分組這一說呢?因為,舉個例子,添加的時候不需要校驗id,而修改的時候id不能為空,有了分組以后,就可以添加的時候校驗用組A,修改的時候校驗用組B

下面重點看一下@CheckTimeInterval

第一步、定義一個注解叫CheckTimeInterval

Spring Boot 參數校驗的具體實現方式

第二步、定義Validator去校驗它

Spring Boot 參數校驗的具體實現方式

順便提一句,這里BeanWrapper去取對象的屬性值,我們稍微看一下BeanWrapper是做什么的

Spring Boot 參數校驗的具體實現方式

Spring Boot 參數校驗的具體實現方式

言歸正傳

第三步、驗證

Spring Boot 參數校驗的具體實現方式

Spring Boot 參數校驗的具體實現方式

Spring Boot 參數校驗的具體實現方式

看,自定義的校驗生效了

6、補充

6.1、校驗模式

https://docs.jboss.org/hibernate/stable/validator/reference/en-US/html_single/#section-fail-fast

下面補充一點,關于校驗模式

默認會校驗完所有屬性,然后將錯誤信息一起返回,但很多時候不需要這樣,一個校驗失敗了,其它就不必校驗了

為此,需要這樣設置

Spring Boot 參數校驗的具體實現方式

6.2、單個參數校驗

Spring Boot 參數校驗的具體實現方式

Spring Boot 參數校驗的具體實現方式

Spring Boot 參數校驗的具體實現方式

如果是調整頁面的時候參數校驗失敗的話,這時可以不做處理,讓其調到錯誤頁面。

如果是接口參數校驗失敗的話,可以在這里進行統一處理,并返回。例如:

Spring Boot 參數校驗的具體實現方式

6.3、錯誤頁面

Spring Boot 參數校驗的具體實現方式

Spring Boot 參數校驗的具體實現方式

以剛才優惠券詳情為例

http://localhost:8080/coupon/detail.html      400

http://localhost:8080/coupon/detail.html?id=    400

http://localhost:8080/coupon/detail.html?id=abc  400

http://localhost:8080/coupon/detail222.html?id=123  404

無權限  403

int a = 1 / 0;  500

6.4、@Valid與@Validated

https://www.jb51.net/article/155033.htm

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

滨海县| 鸡西市| 茶陵县| 那曲县| 长阳| 临朐县| 定日县| 蚌埠市| 衡水市| 筠连县| 徐汇区| 石棉县| 翼城县| 汕尾市| 崇文区| 湖北省| 乐业县| 嘉荫县| 溧水县| 康马县| 禹城市| 金堂县| 堆龙德庆县| 昌图县| 鹰潭市| 盘锦市| 伊金霍洛旗| 辉县市| 黄石市| 武乡县| 彰化县| 德庆县| 普兰店市| 宜兰市| 岑巩县| 炎陵县| 屯留县| 云梦县| 庆阳市| 赤峰市| 蚌埠市|