Spring Boot 參數(shù)校驗(yàn)的具體實(shí)現(xiàn)方式
1、背景介紹
開發(fā)過程中,后臺的參數(shù)校驗(yàn)是必不可少的,所以經(jīng)常會看到類似下面這樣的代碼
這樣寫并沒有什么錯(cuò),還挺工整的,只是看起來不是很優(yōu)雅而已。
接下來,用Validation來改寫這段
2、Spring Boot文檔中的Validation
在Spring Boot的官網(wǎng)中,關(guān)于Validation只是簡單的提了一句,如下
其實(shí),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
5.2、定義一個(gè)對象
5.3、適用@Valid校驗(yàn),并將校驗(yàn)結(jié)果放到BindingResult對象中
注意:
默認(rèn)情況下,如果校驗(yàn)失敗會拋javax.validation.ConstraintViolationException異常,可以用統(tǒng)一異常處理去對這些異常做處理An Errors/BindingResult argument is expected to be declared immediately after the model attribute5.4、看效果
如果在校驗(yàn)的對象后面再加上Model對象的話,如果返回的是ModelAndView就可以將這個(gè)Model設(shè)置到其中,這樣在頁面就可以取到錯(cuò)誤消息了
僅僅只是單字段校驗(yàn)的話未免也太不靈活了吧,如果字段之間有關(guān)聯(lián)關(guān)系,那該如何校驗(yàn)?zāi)??答案是自定義
5.5、自定義校驗(yàn)規(guī)則
這里,以優(yōu)惠券創(chuàng)建為例來演示如何自定義校驗(yàn)規(guī)則
首先,優(yōu)惠券表單如下(僅僅只是演示用):
這里除了自定義了兩條校驗(yàn)規(guī)則之外,還用到了分組。
為什么要有分組這一說呢?因?yàn)椋e個(gè)例子,添加的時(shí)候不需要校驗(yàn)id,而修改的時(shí)候id不能為空,有了分組以后,就可以添加的時(shí)候校驗(yàn)用組A,修改的時(shí)候校驗(yàn)用組B
下面重點(diǎn)看一下@CheckTimeInterval
第一步、定義一個(gè)注解叫CheckTimeInterval
第二步、定義Validator去校驗(yàn)它
順便提一句,這里BeanWrapper去取對象的屬性值,我們稍微看一下BeanWrapper是做什么的
言歸正傳
第三步、驗(yàn)證
看,自定義的校驗(yàn)生效了
6、補(bǔ)充
6.1、校驗(yàn)?zāi)J?/strong>
https://docs.jboss.org/hibernate/stable/validator/reference/en-US/html_single/#section-fail-fast
下面補(bǔ)充一點(diǎn),關(guān)于校驗(yàn)?zāi)J?/p>
默認(rèn)會校驗(yàn)完所有屬性,然后將錯(cuò)誤信息一起返回,但很多時(shí)候不需要這樣,一個(gè)校驗(yàn)失敗了,其它就不必校驗(yàn)了
為此,需要這樣設(shè)置
6.2、單個(gè)參數(shù)校驗(yàn)
如果是調(diào)整頁面的時(shí)候參數(shù)校驗(yàn)失敗的話,這時(shí)可以不做處理,讓其調(diào)到錯(cuò)誤頁面。
如果是接口參數(shù)校驗(yàn)失敗的話,可以在這里進(jìn)行統(tǒng)一處理,并返回。例如:
6.3、錯(cuò)誤頁面
以剛才優(yōu)惠券詳情為例
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
無權(quán)限 403
int a = 1 / 0; 500
6.4、@Valid與@Validated
http://www.dbjr.com.cn/article/155033.htm
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Reactor 多任務(wù)并發(fā)執(zhí)行且結(jié)果按順序返回第一個(gè)
這篇文章主要介紹了Reactor 多任務(wù)并發(fā)執(zhí)行且結(jié)果按順序返回第一個(gè),文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,感興趣的小伙伴可以參考一下2022-09-09關(guān)于Spring配置文件加載方式變化引發(fā)的異常詳解
這篇文章主要給大家介紹了關(guān)于Spring配置文件加載方式變化引發(fā)的異常的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用Spring具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2022-01-01JAVA實(shí)現(xiàn)的CrazyArcade泡泡堂游戲
CrazyArcade泡泡堂游戲,一款用Java編寫的JavaSwing游戲程序。 使用了MVC模式,分離了模型、視圖和控制器,使得項(xiàng)目結(jié)構(gòu)清晰易于擴(kuò)展,使用配置文件來設(shè)置游戲基本配置,擴(kuò)展地圖人物道具等。同時(shí),該程序編寫期間用了單例模式、工廠模式、模板模式等設(shè)計(jì)模式。2021-04-04java后端pageHelper分頁實(shí)現(xiàn)方法步驟
這篇文章主要給大家介紹了關(guān)于java后端pageHelper分頁實(shí)現(xiàn)方法的相關(guān)資料,在我們的Java項(xiàng)目中分頁是必不可少的數(shù)據(jù)展示頁面,文中通過圖文以及示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-07-07Spring加載屬性文件方式(自動(dòng)加載優(yōu)先級問題)
這篇文章主要介紹了Spring加載屬性文件方式(自動(dòng)加載優(yōu)先級問題),具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-02-02spring為類的靜態(tài)屬性實(shí)現(xiàn)注入實(shí)例方法
在本篇文章里小編給大家整理的是關(guān)于spring為類的靜態(tài)屬性實(shí)現(xiàn)注入實(shí)例方法,有需要的朋友們可以參考下。2019-10-10