springboot自定義校驗(yàn)注解的實(shí)現(xiàn)過(guò)程
通過(guò)谷粒商城項(xiàng)目學(xué)習(xí)了自定義校驗(yàn)器的實(shí)現(xiàn)
近日在學(xué)習(xí)雷神的谷粒商城項(xiàng)目,其中有一個(gè)自定義校驗(yàn)的實(shí)現(xiàn),記錄一下學(xué)習(xí)的過(guò)程。下面是自定義校驗(yàn)實(shí)現(xiàn)的三個(gè)過(guò)程。
提示:以下是本篇文章正文內(nèi)容,下面案例可供參考
一、編寫(xiě)自定義校驗(yàn)注解
1.假如我們要自定義一個(gè)校驗(yàn)注解,該注解是判斷該字段是否為0,1。如果不是0或者1,則校驗(yàn)報(bào)錯(cuò)。
@ListValue(vals={0,1}) private Integer showStatus;
2.進(jìn)行自定義注解的創(chuàng)建,注意創(chuàng)建類型為Annotation
3.查看其它自定義注解,發(fā)現(xiàn)都有三個(gè)元數(shù)據(jù)
String message() default "{javax.validation.constraints.NotBlank.message}"; Class<?>[] groups() default {}; Class<? extends Payload>[] payload() default {};
將這三條數(shù)據(jù)編寫(xiě)進(jìn)入自定義注解里面
4.因?yàn)槲覀冏远x注解還包含了vals這個(gè)數(shù)組,所以我們需要?jiǎng)?chuàng)建一個(gè)這樣的數(shù)據(jù)數(shù)據(jù)。
int[] vals() default {};
5.引入相關(guān)的注解,觀看其他注解,發(fā)現(xiàn)基本上實(shí)現(xiàn)了下面的注解
@Documented @Constraint( validatedBy = {ListValueConstraintValidator.class}//使用哪個(gè)注解校驗(yàn)器 ) @Target({ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE, ElementType.CONSTRUCTOR, ElementType.PARAMETER, ElementType.TYPE_USE})//在那些上面可以使用,方法,字段等 @Retention(RetentionPolicy.RUNTIME)//運(yùn)行時(shí)獲取
下面是自定義注解整個(gè)代碼的實(shí)現(xiàn):
package com.atguigu.common.valid; import javax.validation.Constraint; import javax.validation.Payload; import java.lang.annotation.*; @Documented @Constraint( validatedBy = {ListValueConstraintValidator.class} ) @Target({ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE, ElementType.CONSTRUCTOR, ElementType.PARAMETER, ElementType.TYPE_USE}) @Retention(RetentionPolicy.RUNTIME) public @interface ListValue { String message() default "{com.atguigu.common.valid.ListValue.message}"; Class<?>[] groups() default {}; Class<? extends Payload>[] payload() default {}; int[] vals() default {}; }
二、自定義注解的校驗(yàn)器
1.在自定義注解里面,有一個(gè)引用哪個(gè)校驗(yàn)器的字段validatedBy,點(diǎn)進(jìn)去看一下,發(fā)現(xiàn)實(shí)現(xiàn)了這個(gè)接口:ConstraintValidator
2.創(chuàng)建一個(gè)自定義校驗(yàn)器,實(shí)現(xiàn)上面的校驗(yàn)器接口
implements ConstraintValidator<ListValue,Integer>//第一個(gè)字段寫(xiě)入自定義注解的名字,第二個(gè)我們校驗(yàn)的屬性是Integer類型,所以填入Integer
3.ConstraintValidator的實(shí)現(xiàn),有兩個(gè)方法,一個(gè)是初始化,一個(gè)是校驗(yàn)
private Set<Integer> set = new HashSet<>(); //初始化方法 @Override public void initialize(ListValue constraintAnnotation) { int[] vals = constraintAnnotation.vals();//包含咱們自定義注解中的vals的值[0,1] for (int val : vals) { set.add(val); } } //判斷是否校驗(yàn)成功 /** * * @param integer 需要判斷的值,比如傳入3,是否符合0,1狀態(tài) * @param constraintValidatorContext * @return */ @Override public boolean isValid(Integer integer, ConstraintValidatorContext constraintValidatorContext) { return set.contains(integer); }
三、關(guān)聯(lián)自定義的校驗(yàn)器和自定義的校驗(yàn)注解
在自定義注解里面引入自定義注解的校驗(yàn)器
validatedBy = {ListValueConstraintValidator.class【可以指定多個(gè)校驗(yàn)器,校驗(yàn)不同類型的值】}
總結(jié)
自定義校驗(yàn)的實(shí)現(xiàn)三個(gè)步驟:
1).編寫(xiě)一個(gè)自定義的校驗(yàn)注解
2).編寫(xiě)一個(gè)自定義的校驗(yàn)器
3).關(guān)聯(lián)自定義的校驗(yàn)器和自定義的校驗(yàn)注解validatedBy = {ListValueConstraintValidator.class【可以指定多個(gè)校驗(yàn)器,校驗(yàn)不同類型的值】}
到此這篇關(guān)于springboot自定義校驗(yàn)注解的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)springboot自定義校驗(yàn)注解內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- SpringBoot?使用?Sa-Token?完成注解鑒權(quán)功能(權(quán)限校驗(yàn))
- SpringBoot通過(guò)自定義注解實(shí)現(xiàn)參數(shù)校驗(yàn)
- SpringBoot?@GroupSequenceProvider注解實(shí)現(xiàn)bean多屬性聯(lián)合校驗(yàn)的示例代碼
- SpringBoot通過(guò)AOP與注解實(shí)現(xiàn)入?yún)⑿r?yàn)詳情
- SpringBoot常見(jiàn)get/post請(qǐng)求參數(shù)處理、參數(shù)注解校驗(yàn)及參數(shù)自定義注解校驗(yàn)詳解
- SpringBoot中@Pattern注解對(duì)時(shí)間格式校驗(yàn)方式
- SpringBoot自定義注解API數(shù)據(jù)加密和簽名校驗(yàn)
- SpringBoot中自定義注解實(shí)現(xiàn)參數(shù)非空校驗(yàn)的示例
- SpringBoot @Validated注解實(shí)現(xiàn)參數(shù)分組校驗(yàn)的方法實(shí)例
相關(guān)文章
Springboot中如何使用過(guò)濾器校驗(yàn)PSOT類型請(qǐng)求參數(shù)內(nèi)容
在Springboot中創(chuàng)建過(guò)濾器,用來(lái)過(guò)濾所有POST類型請(qǐng)求并獲取body中的參數(shù)進(jìn)行校驗(yàn)內(nèi)容是否合法,該方法僅適用于POST類型請(qǐng)求,本文給大家介紹Springboot中如何使用過(guò)濾器校驗(yàn)PSOT類型請(qǐng)求參數(shù)內(nèi)容,感興趣的朋友一起看看吧2023-08-08idea中MavenWeb項(xiàng)目不能創(chuàng)建Servlet的解決方案
這篇文章主要介紹了idea中MavenWeb項(xiàng)目不能創(chuàng)建Servlet的解決方案,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-02-02從零開(kāi)始學(xué)springboot整合feign跨服務(wù)調(diào)用的方法
這篇文章主要介紹了從零開(kāi)始學(xué)springboot整合feign跨服務(wù)調(diào)用的方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-03-03Java for循環(huán)Map集合優(yōu)化實(shí)現(xiàn)解析
這篇文章主要介紹了Java for循環(huán)Map集合優(yōu)化實(shí)現(xiàn)解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-01-01Java使用OpenCV3.2實(shí)現(xiàn)視頻讀取與播放
這篇文章主要為大家詳細(xì)介紹了Java使用OpenCV3.2實(shí)現(xiàn)視頻讀取與播放,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-07-07Java8利用Stream實(shí)現(xiàn)列表去重的方法詳解
這篇文章主要為大家介紹了Java利用Stream實(shí)現(xiàn)列表去重的幾種方法詳解,文中的示例代碼講解詳細(xì),需要的小伙伴可以參考一下2022-04-04java實(shí)現(xiàn)html轉(zhuǎn)pdf方法步驟
這篇文章主要給大家介紹了關(guān)于java實(shí)現(xiàn)html轉(zhuǎn)pdf方法的相關(guān)資料,要將HTML轉(zhuǎn)換成PDF,我們需要借助Java中的第三方庫(kù),文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-08-08springboot中使用redis并且執(zhí)行調(diào)試lua腳本
今天有個(gè)項(xiàng)目需要使用redis,并且有使用腳本的需求,本文主要介紹了springboot中使用redis并且執(zhí)行調(diào)試lua腳本,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-04-04springboot+vue實(shí)現(xiàn)阿里云oss大文件分片上傳的示例代碼
阿里云推出了直傳,本文主要介紹了springboot+vue實(shí)現(xiàn)阿里云oss大文件分片上傳的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2024-06-06