一文帶你快速入手 Spring Boot 參數(shù)校驗


作者:狂亂的貴公子?
來源:cnblogs.com/cjsblog/p/8946768.html
- 1、背景介紹
- 2、Spring Boot文檔中的Validation
- 3、Hibernate Validator
- 4、Spring Validator
- 5、示例
- 6、補充
- 參考
1、背景介紹
開發(fā)過程中,后臺的參數(shù)校驗是必不可少的,所以經(jīng)常會看到類似下面這樣的代碼

這樣寫并沒有什么錯,還挺工整的,只是看起來不是很優(yōu)雅而已。
接下來,用Validation來改寫這段
2、Spring Boot文檔中的Validation在Spring Boot的官網(wǎng)中,關(guān)于Validation只是簡單的提了一句,如下

其實,Spring Validator?和**Hibernate?Validator** 是兩套Validator,可以混著用,這里我們用**Hibernate?Validator**
3、Hibernate Validatorhttps://docs.jboss.org/hibernate/stable/validator/reference/en-US/html_single/#preface
4、Spring Validatorhttps://docs.spring.io/spring/docs/5.0.5.RELEASE/spring-framework-reference/core.html#validation
5、示例5.1、引入spring-boot-starter-validation

5.2、定義一個對象

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

注意:
- 默認情況下,如果校驗失敗會拋javax.validation.ConstraintViolationException異常,可以用統(tǒng)一異常處理去對這些異常做處理
- An Errors/BindingResult argument is expected to be declared immediately after the model attribute
5.4、看效果


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

僅僅只是單字段校驗的話未免也太不靈活了吧,如果字段之間有關(guān)聯(lián)關(guān)系,那該如何校驗?zāi)兀看鸢甘亲远x
5.5、自定義校驗規(guī)則
https://docs.jboss.org/hibernate/stable/validator/reference/en-US/html_single/#validator-customconstraints

這里,以優(yōu)惠券創(chuàng)建為例來演示如何自定義校驗規(guī)則
首先,優(yōu)惠券表單如下(僅僅只是演示用):

這里除了自定義了兩條校驗規(guī)則之外,還用到了分組。
為什么要有分組這一說呢?因為,舉個例子,添加的時候不需要校驗id,而修改的時候id不能為空,有了分組以后,就可以添加的時候校驗用組A,修改的時候校驗用組B
下面重點看一下@CheckTimeInterval
第一步?、定義一個注解叫CheckTimeInterval

第二步?、定義Validator去校驗它

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


言歸正傳
第三步?、驗證



看,自定義的校驗生效了
6、補充6.1、校驗?zāi)J?/span>
https://docs.jboss.org/hibernate/stable/validator/reference/en-US/html_single/#section-fail-fast
下面補充一點,關(guān)于校驗?zāi)J?/p>
默認會校驗完所有屬性,然后將錯誤信息一起返回,但很多時候不需要這樣,一個校驗失敗了,其它就不必校驗了
為此,需要這樣設(shè)置

6.2、單個參數(shù)校驗



如果是調(diào)整頁面的時候參數(shù)校驗失敗的話,這時可以不做處理,讓其調(diào)到錯誤頁面。
如果是接口參數(shù)校驗失敗的話,可以在這里進行統(tǒng)一處理,并返回。例如:

6.3、錯誤頁面


以剛才優(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
https://blog.csdn.net/qq_27680317/article/details/79970590
參考http://rensanning.iteye.com/blog/2357373
https://blog.csdn.net/kenight/article/details/77774465
https://www.cnblogs.com/mr-yang-localhost/p/7812038.html
https://www.phpsong.com/3567.html
https://www.cnblogs.com/mr-yang-localhost/p/7812038.html
- End -

技術(shù)連載目錄(可點擊跳轉(zhuǎn)即可閱讀):
Maven系列教程??點擊-->?Maven技術(shù)干貨連載目錄?跳轉(zhuǎn)
MyBatis系列教程??點擊-->?MyBatis技術(shù)干貨連載目錄?跳轉(zhuǎn)
JVM調(diào)優(yōu)總結(jié)系列教程??點擊-->?JVM調(diào)優(yōu)技術(shù)干貨連載目錄?跳轉(zhuǎn)
點擊在看,愿你我不再陌生?![]()
