springboot自定義校驗(yàn)注解的實(shí)現(xiàn)過程
通過谷粒商城項(xiàng)目學(xué)習(xí)了自定義校驗(yàn)器的實(shí)現(xiàn)
近日在學(xué)習(xí)雷神的谷粒商城項(xiàng)目,其中有一個自定義校驗(yàn)的實(shí)現(xiàn),記錄一下學(xué)習(xí)的過程。下面是自定義校驗(yàn)實(shí)現(xiàn)的三個過程。
提示:以下是本篇文章正文內(nèi)容,下面案例可供參考
一、編寫自定義校驗(yàn)注解
1.假如我們要自定義一個校驗(yàn)注解,該注解是判斷該字段是否為0,1。如果不是0或者1,則校驗(yàn)報錯。
@ListValue(vals={0,1})
private Integer showStatus;2.進(jìn)行自定義注解的創(chuàng)建,注意創(chuàng)建類型為Annotation

3.查看其它自定義注解,發(fā)現(xiàn)都有三個元數(shù)據(jù)
String message() default "{javax.validation.constraints.NotBlank.message}";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};將這三條數(shù)據(jù)編寫進(jìn)入自定義注解里面
4.因?yàn)槲覀冏远x注解還包含了vals這個數(shù)組,所以我們需要創(chuàng)建一個這樣的數(shù)據(jù)數(shù)據(jù)。
int[] vals() default {};5.引入相關(guān)的注解,觀看其他注解,發(fā)現(xiàn)基本上實(shí)現(xiàn)了下面的注解
@Documented
@Constraint(
validatedBy = {ListValueConstraintValidator.class}//使用哪個注解校驗(yàn)器
)
@Target({ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE, ElementType.CONSTRUCTOR, ElementType.PARAMETER, ElementType.TYPE_USE})//在那些上面可以使用,方法,字段等
@Retention(RetentionPolicy.RUNTIME)//運(yùn)行時獲取下面是自定義注解整個代碼的實(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.在自定義注解里面,有一個引用哪個校驗(yàn)器的字段validatedBy,點(diǎn)進(jìn)去看一下,發(fā)現(xiàn)實(shí)現(xiàn)了這個接口:ConstraintValidator

2.創(chuàng)建一個自定義校驗(yàn)器,實(shí)現(xiàn)上面的校驗(yàn)器接口

implements ConstraintValidator<ListValue,Integer>//第一個字段寫入自定義注解的名字,第二個我們校驗(yàn)的屬性是Integer類型,所以填入Integer
3.ConstraintValidator的實(shí)現(xiàn),有兩個方法,一個是初始化,一個是校驗(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【可以指定多個校驗(yàn)器,校驗(yàn)不同類型的值】}總結(jié)
自定義校驗(yàn)的實(shí)現(xiàn)三個步驟:
1).編寫一個自定義的校驗(yàn)注解
2).編寫一個自定義的校驗(yàn)器
3).關(guān)聯(lián)自定義的校驗(yàn)器和自定義的校驗(yàn)注解validatedBy = {ListValueConstraintValidator.class【可以指定多個校驗(yàn)器,校驗(yàn)不同類型的值】}
到此這篇關(guān)于springboot自定義校驗(yàn)注解的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)springboot自定義校驗(yàn)注解內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- SpringBoot?使用?Sa-Token?完成注解鑒權(quán)功能(權(quán)限校驗(yàn))
- SpringBoot通過自定義注解實(shí)現(xiàn)參數(shù)校驗(yàn)
- SpringBoot?@GroupSequenceProvider注解實(shí)現(xiàn)bean多屬性聯(lián)合校驗(yàn)的示例代碼
- SpringBoot通過AOP與注解實(shí)現(xiàn)入?yún)⑿r?yàn)詳情
- SpringBoot常見get/post請求參數(shù)處理、參數(shù)注解校驗(yàn)及參數(shù)自定義注解校驗(yàn)詳解
- SpringBoot中@Pattern注解對時間格式校驗(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中如何使用過濾器校驗(yàn)PSOT類型請求參數(shù)內(nèi)容
在Springboot中創(chuàng)建過濾器,用來過濾所有POST類型請求并獲取body中的參數(shù)進(jìn)行校驗(yàn)內(nèi)容是否合法,該方法僅適用于POST類型請求,本文給大家介紹Springboot中如何使用過濾器校驗(yàn)PSOT類型請求參數(shù)內(nèi)容,感興趣的朋友一起看看吧2023-08-08
idea中MavenWeb項(xiàng)目不能創(chuàng)建Servlet的解決方案
這篇文章主要介紹了idea中MavenWeb項(xiàng)目不能創(chuàng)建Servlet的解決方案,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下2020-02-02
從零開始學(xué)springboot整合feign跨服務(wù)調(diào)用的方法
這篇文章主要介紹了從零開始學(xué)springboot整合feign跨服務(wù)調(diào)用的方法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-03-03
Java for循環(huán)Map集合優(yōu)化實(shí)現(xiàn)解析
這篇文章主要介紹了Java for循環(huán)Map集合優(yōu)化實(shí)現(xiàn)解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-01-01
Java使用OpenCV3.2實(shí)現(xiàn)視頻讀取與播放
這篇文章主要為大家詳細(xì)介紹了Java使用OpenCV3.2實(shí)現(xiàn)視頻讀取與播放,具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-07-07
Java8利用Stream實(shí)現(xiàn)列表去重的方法詳解
這篇文章主要為大家介紹了Java利用Stream實(shí)現(xiàn)列表去重的幾種方法詳解,文中的示例代碼講解詳細(xì),需要的小伙伴可以參考一下2022-04-04
java實(shí)現(xiàn)html轉(zhuǎn)pdf方法步驟
這篇文章主要給大家介紹了關(guān)于java實(shí)現(xiàn)html轉(zhuǎn)pdf方法的相關(guān)資料,要將HTML轉(zhuǎn)換成PDF,我們需要借助Java中的第三方庫,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-08-08
springboot中使用redis并且執(zhí)行調(diào)試lua腳本
今天有個項(xiàng)目需要使用redis,并且有使用腳本的需求,本文主要介紹了springboot中使用redis并且執(zhí)行調(diào)試lua腳本,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-04-04
springboot+vue實(shí)現(xiàn)阿里云oss大文件分片上傳的示例代碼
阿里云推出了直傳,本文主要介紹了springboot+vue實(shí)現(xiàn)阿里云oss大文件分片上傳的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-06-06

