SpringMVC使用自定義驗(yàn)證器進(jìn)行數(shù)據(jù)驗(yàn)證的方法
SpringMVC 中的數(shù)據(jù)驗(yàn)證如何使用自定義驗(yàn)證器
簡(jiǎn)介
SpringMVC 是一個(gè)基于 Spring 框架的 Web 框架,它提供了一套完整的 MVC 架構(gòu),可以幫助開(kāi)發(fā)者快速構(gòu)建 Web 應(yīng)用程序。在 Web 開(kāi)發(fā)中,數(shù)據(jù)驗(yàn)證是非常重要的一環(huán),它可以幫助我們保證數(shù)據(jù)的有效性和完整性,防止惡意攻擊和數(shù)據(jù)泄露。
SpringMVC 數(shù)據(jù)驗(yàn)證機(jī)制
SpringMVC 的數(shù)據(jù)驗(yàn)證機(jī)制基于 JSR 303 規(guī)范,即 Bean Validation 規(guī)范。該規(guī)范定義了一套標(biāo)準(zhǔn)的注解,用于描述數(shù)據(jù)驗(yàn)證規(guī)則。SpringMVC 提供了一個(gè)統(tǒng)一的驗(yàn)證器接口 Validator
,用于執(zhí)行數(shù)據(jù)驗(yàn)證。開(kāi)發(fā)者可以實(shí)現(xiàn)該接口,編寫(xiě)自定義驗(yàn)證器。
在 SpringMVC 中,數(shù)據(jù)驗(yàn)證是在控制器方法執(zhí)行之前進(jìn)行的。當(dāng)表單數(shù)據(jù)提交到控制器方法時(shí),SpringMVC 會(huì)自動(dòng)將表單數(shù)據(jù)轉(zhuǎn)換成 Java 對(duì)象,并執(zhí)行數(shù)據(jù)驗(yàn)證。如果驗(yàn)證失敗,則會(huì)拋出 org.springframework.validation.BindException
異常,開(kāi)發(fā)者可以在異常處理器中處理該異常。
自定義驗(yàn)證器
自定義驗(yàn)證器是指開(kāi)發(fā)者根據(jù)業(yè)務(wù)需求編寫(xiě)的驗(yàn)證器。在 SpringMVC 中,自定義驗(yàn)證器需要實(shí)現(xiàn) Validator
接口,并重寫(xiě) supports()
和 validate()
方法。
supports() 方法
supports()
方法用于判斷當(dāng)前驗(yàn)證器是否支持某個(gè)驗(yàn)證對(duì)象。該方法的參數(shù)是一個(gè) Class
對(duì)象,表示待驗(yàn)證對(duì)象的類(lèi)型。開(kāi)發(fā)者需要在該方法中判斷該類(lèi)型是否滿(mǎn)足驗(yàn)證器的要求,如果滿(mǎn)足,則返回 true
,否則返回 false
。
public class MyValidator implements Validator { @Override public boolean supports(Class<?> clazz) { // 判斷 clazz 是否是待驗(yàn)證對(duì)象的類(lèi)型 // 如果是,則返回 true,否則返回 false } }
在 SpringMVC 中使用自定義驗(yàn)證器
使用自定義驗(yàn)證器的步驟如下:
- 定義待驗(yàn)證對(duì)象
- 編寫(xiě)自定義驗(yàn)證器
- 在控制器方法中注入自定義驗(yàn)證器
- 執(zhí)行數(shù)據(jù)驗(yàn)證
定義待驗(yàn)證對(duì)象
待驗(yàn)證對(duì)象是指表單提交的數(shù)據(jù)所對(duì)應(yīng)的 Java 對(duì)象。在定義該對(duì)象時(shí),需要使用 Bean Validation 規(guī)范的注解來(lái)描述驗(yàn)證規(guī)則。例如,下面是一個(gè)簡(jiǎn)單的待驗(yàn)證對(duì)象:
public class User { @NotNull private String username; @Size(min = 6, max = 20) private String password; // 省略 getter 和 setter 方法 }
在上面的代碼中,username
屬性使用了 @NotNull
注解,表示該屬性不能為空;password
屬性使用了 @Size
注解,表示該屬性的長(zhǎng)度必須在 6 到 20 之間。
編寫(xiě)自定義驗(yàn)證器
編寫(xiě)自定義驗(yàn)證器的步驟已經(jīng)在前面介紹過(guò)了,這里就不再贅述。
在控制器方法中注入自定義驗(yàn)證器
在控制器方法中,需要使用 @InitBinder
注解來(lái)注冊(cè)自定義驗(yàn)證器。例如,下面是一個(gè)簡(jiǎn)單的控制器方法:
@PostMapping("/register") public String register(@Valid User user, BindingResult result) { if (result.hasErrors()) { // 處理驗(yàn)證錯(cuò)誤 } // 處理注冊(cè)邏輯 }
在上面的代碼中,@Valid 注解表示對(duì) User 對(duì)象進(jìn)行數(shù)據(jù)驗(yàn)證,BindingResult 對(duì)象用于保存驗(yàn)證錯(cuò)誤信息。如果驗(yàn)證失敗,則可以在 BindingResult 對(duì)象中獲取錯(cuò)誤信息。
為了使用自定義驗(yàn)證器,需要在控制器中添加 @InitBinder 注解,并在該注解中注冊(cè)自定義驗(yàn)證器。例如,下面是一個(gè)簡(jiǎn)單的自定義驗(yàn)證器和控制器方法:
public class MyValidator implements Validator { @Override public boolean supports(Class<?> clazz) { return User.class.isAssignableFrom(clazz); } @Override public void validate(Object target, Errors errors) { User user = (User) target; if (!user.getPassword().equals(user.getConfirmPassword())) { errors.rejectValue("confirmPassword", "password.not.match"); } } } @Controller public class UserController { @InitBinder public void initBinder(WebDataBinder binder) { binder.addValidators(new MyValidator()); } @PostMapping("/register") public String register(@Valid User user, BindingResult result) { if (result.hasErrors()) { // 處理驗(yàn)證錯(cuò)誤 } // 處理注冊(cè)邏輯 } }
在上面的代碼中,MyValidator 類(lèi)實(shí)現(xiàn)了自定義驗(yàn)證器,它驗(yàn)證用戶(hù)輸入的密碼和確認(rèn)密碼是否一致。在控制器中,使用 @InitBinder 注解注冊(cè)自定義驗(yàn)證器,然后在控制器方法中使用 @Valid 注解對(duì) User 對(duì)象進(jìn)行數(shù)據(jù)驗(yàn)證。
總結(jié)
SpringMVC 提供了強(qiáng)大的數(shù)據(jù)驗(yàn)證機(jī)制,可以方便地驗(yàn)證表單提交的數(shù)據(jù)。除了自帶的驗(yàn)證器之外,SpringMVC 還支持自定義驗(yàn)證器,允許開(kāi)發(fā)者根據(jù)業(yè)務(wù)需求自定義驗(yàn)證規(guī)則。本文介紹了如何在 SpringMVC 中使用自定義驗(yàn)證器,包括定義待驗(yàn)證對(duì)象、編寫(xiě)自定義驗(yàn)證器、在控制器方法中注入自定義驗(yàn)證器等步驟。開(kāi)發(fā)者可以根據(jù)自己的業(yè)務(wù)需求,編寫(xiě)自定義驗(yàn)證器,確保數(shù)據(jù)的有效性和完整性,提高 Web 應(yīng)用程序的安全性和穩(wěn)定性。
以上就是SpringMVC使用自定義驗(yàn)證器進(jìn)行數(shù)據(jù)驗(yàn)證的方法的詳細(xì)內(nèi)容,更多關(guān)于SpringMVC數(shù)據(jù)驗(yàn)證的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
使用Jenkins一鍵打包部署SpringBoot項(xiàng)目的步驟詳解
任何簡(jiǎn)單操作的背后,都有一套相當(dāng)復(fù)雜的機(jī)制,本文將以SpringBoot應(yīng)用的在Docker環(huán)境下的打包部署為例,詳細(xì)講解如何使用Jenkins一鍵打包部署SpringBoot應(yīng)用,文中通過(guò)圖文結(jié)合講解的非常詳細(xì),需要的朋友可以參考下2023-11-11Java中JWT(JSON?Web?Token)的運(yùn)用具體案例
這篇文章主要介紹了Java中JWT(JSON?Web?Token)的運(yùn)用具體案例,JWT(JSON?Web?Token)是一種開(kāi)放標(biāo)準(zhǔn),用于在網(wǎng)絡(luò)應(yīng)用環(huán)境中安全地傳遞信息,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-11-11關(guān)于Controller 層返回值的公共包裝類(lèi)的問(wèn)題
本文給大家介紹Controller 層返回值的公共包裝類(lèi)-避免每次都包裝一次返回-InitializingBean增強(qiáng),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友參考下吧2021-09-09Java 數(shù)據(jù)庫(kù)連接池 Tomcat介紹
這篇文章主要給大家分享了 Java 數(shù)據(jù)庫(kù)連接池 Tomcat介紹,omcat 是一個(gè)小型的輕量級(jí)應(yīng)用服務(wù)器,在中小型系統(tǒng)和并發(fā)訪(fǎng)問(wèn)用戶(hù)不是很多的場(chǎng)合下被普遍使用,是開(kāi)發(fā)和調(diào)試JSP 程序的首選。下面來(lái)看看文章內(nèi)容的詳細(xì)介紹吧2021-11-11springboot手動(dòng)事務(wù)回滾的實(shí)現(xiàn)代碼
這篇文章主要介紹了springboot手動(dòng)事務(wù)回滾的實(shí)現(xiàn)方法,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-07-07IDEA JeeSite框架httpSession.invalidate()無(wú)效問(wèn)題解決方案
這篇文章主要介紹了IDEA JeeSite框架httpSession.invalidate()無(wú)效問(wèn)題解決方案,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-09-09