溫馨提示×

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

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

怎么使用Spring Validation

發(fā)布時(shí)間:2021-11-03 17:37:38 來源:億速云 閱讀:178 作者:iii 欄目:編程語言

本篇內(nèi)容主要講解“怎么使用Spring Validation”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“怎么使用Spring Validation”吧!

首先添加POM依賴

新建一個(gè)Spring Boot項(xiàng)目,并在pom.xml文件添加依賴:

怎么使用Spring Validation

需要特別注意的一點(diǎn)是:如果我們項(xiàng)目中引入了spring-boot-starter-web依賴,那么它會(huì)自動(dòng)依賴spring-boot-starter-validation,無需我們?cè)偈謩?dòng)添加依賴,防止出現(xiàn)一些版本兼容的問題。

添加約束注解

在接收參數(shù)的UserReq實(shí)體類對(duì)應(yīng)的屬性上加上約束注解:

怎么使用Spring Validation

注意點(diǎn):

  • 每個(gè)約束注解都有一個(gè)message元素,用于校驗(yàn)失敗時(shí)的提示信息

  • 一個(gè)屬性可以添加多個(gè)約束注解,所有注解是與的關(guān)系,必須全部驗(yàn)證通過

  • 可以使用正則表達(dá)式校驗(yàn)參數(shù)

眼尖的同學(xué)可能會(huì)發(fā)現(xiàn)上面代碼中用到的一些約束注解一些是引用自javax.validation.constraints包下,還有一些引用自org.hibernate.validator.constraints包下,這是怎么一回事呢?

說到這里,不得不提一下JSR-303,JSR-303是JAVA EE(現(xiàn)改名為:Jakarta EE)中的一項(xiàng)子規(guī)范,叫Bean Validation,它定義了一些實(shí)體和方法驗(yàn)證的約束和接口規(guī)范,而Hibernate Validator對(duì)Bean Validation規(guī)范中所有內(nèi)置約束注解都提供了實(shí)現(xiàn),并且還添加了一些額外的約束注解。

Bean Validation中內(nèi)置的約束注解:

怎么使用Spring Validation

Hibernate Validator中添加的約束注解:

怎么使用Spring Validation

值得一提的是:在Hibernate Validator中額外添加的一些優(yōu)秀的約束注解比如@Email、@NotEmpty@NotBlank已經(jīng)被吸收到Bean Validation標(biāo)準(zhǔn)約束注解中,所有我們?cè)诖a中Import時(shí)應(yīng)盡量使用javax.validation.constraints包下的約束注解。

怎么使用呢?

接收參數(shù)的實(shí)體類我們已經(jīng)改造好了,但是還不能實(shí)現(xiàn)校驗(yàn)的功能,還需要對(duì)Controller進(jìn)行改造:

怎么使用Spring Validation

  • 在接收方法的參數(shù)前面加上@Validated注解,當(dāng)然也可以加@Valid注解

  • 想要獲取參數(shù)校驗(yàn)的結(jié)果,則需要進(jìn)行校驗(yàn)的參數(shù)后面緊跟一個(gè)BingingResult類型的參數(shù),用來綁定校驗(yàn)結(jié)果

關(guān)于第一點(diǎn),@Validated注解由Spring框架提供,可以說是對(duì)JSR-303規(guī)范標(biāo)準(zhǔn)注解@Valid的封裝,可以提供額外的例如分組校驗(yàn)的功能。實(shí)際上任何以"Valid"開頭的注解都可以實(shí)現(xiàn)同樣的效果(至于原因有機(jī)會(huì)專門寫一篇講一下,感興趣的可以關(guān)注一下)

至于第二點(diǎn),為什么校驗(yàn)結(jié)果會(huì)自動(dòng)綁定到后面緊跟的BingingResult對(duì)象,這里面涉及到Spring DataBinder數(shù)據(jù)綁定相關(guān)的知識(shí)(以后會(huì)專門講解,感興趣的可以關(guān)注一下),現(xiàn)在我們只需要知道這樣寫就行。

請(qǐng)求測試

現(xiàn)在我們使用Postman工具來請(qǐng)求我們的接口:

怎么使用Spring Validation

然后我們打上斷點(diǎn)來調(diào)試一下bindingResult對(duì)象:

可以看到bindingResult對(duì)象成功綁定并返回了三個(gè)屬性校驗(yàn)失敗的結(jié)果。

分組校驗(yàn)

我們寫業(yè)務(wù)時(shí)通常會(huì)存在一種情況:新增操作時(shí)通常不需要校驗(yàn)參數(shù)Id,而在修改或刪除操作時(shí)我們又需要校驗(yàn)參數(shù)Id,那么對(duì)于同一個(gè)參數(shù)接收類UserReq,我們要怎么處理呢?

很簡單,首先我們新建一個(gè)更新分組,只需要一個(gè)普普通通的接口類就行:

怎么使用Spring Validation

接著我們?cè)赨serReq類里新增一個(gè)id屬性,同時(shí)加上@NotNull分組校驗(yàn):

怎么使用Spring Validation

groups支持傳入一個(gè)數(shù)組,可以傳入多個(gè)分組,對(duì)于id屬性來說,在更新和刪除操作時(shí)我們都需要校驗(yàn)該屬性。

最后,在Controller里更新接口方法中添加校驗(yàn)分組:

怎么使用Spring Validation

我們只需要在注解中加上需要校驗(yàn)的Update分組就行啦。

到此,相信大家對(duì)“怎么使用Spring Validation”有了更深的了解,不妨來實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI