最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

springboot自定義校驗(yàn)注解的實(shí)現(xiàn)過程

 更新時間:2023年11月30日 14:44:53   作者:xiaoxust  
這篇文章主要介紹了springboot自定義校驗(yàn)注解的實(shí)現(xiàn)過程,本文結(jié)合示例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧

通過谷粒商城項(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)報(bào)錯。

@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)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 對handlerexecutionchain類的深入理解

    對handlerexecutionchain類的深入理解

    下面小編就為大家?guī)硪黄獙andlerexecutionchain類的深入理解。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-07-07
  • java中求高精度除法,要求保留N位小數(shù)

    java中求高精度除法,要求保留N位小數(shù)

    這篇文章主要介紹了java中求高精度除法,要求保留N位小數(shù)的實(shí)現(xiàn),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • Java項(xiàng)目NoProviderFoundException報(bào)錯的解決方案

    Java項(xiàng)目NoProviderFoundException報(bào)錯的解決方案

    在Java開發(fā)中,jakarta.validation.NoProviderFoundException?是一個令人困惑的運(yùn)行時錯誤,常因校驗(yàn)框架依賴缺失或版本沖突導(dǎo)致,本文給大家介紹了Java項(xiàng)目NoProviderFoundException報(bào)錯的解決方案,需要的朋友可以參考下
    2025-06-06
  • Ubuntu快速安裝jdk的教程

    Ubuntu快速安裝jdk的教程

    這篇文章主要為大家詳細(xì)介紹了Ubuntu快速安裝jdk的教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-04-04
  • 使用Spring實(shí)現(xiàn)@Value注入靜態(tài)字段

    使用Spring實(shí)現(xiàn)@Value注入靜態(tài)字段

    這篇文章主要介紹了使用Spring實(shí)現(xiàn)@Value注入靜態(tài)字段方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • Java設(shè)計(jì)模式之適配器模式詳解

    Java設(shè)計(jì)模式之適配器模式詳解

    這篇文章主要介紹了Java設(shè)計(jì)模式之適配器模式詳解,適配器模式將一個類的接口轉(zhuǎn)換成客戶希望的另一個接口,Adapter模式使得原本由于接口不兼容而不能一起工作的哪些類可以一起工作,需要的朋友可以參考下
    2023-09-09
  • java中超過int的最大范圍問題

    java中超過int的最大范圍問題

    文章討論了Java中處理超過int最大范圍的整數(shù)問題,在接收到超過int范圍的參數(shù)時,直接轉(zhuǎn)換會引發(fā)異常,建議使用Long或BigInteger處理,提供了代碼示例,包括JSP頁面和Servlet處理邏輯
    2026-05-05
  • Java對象數(shù)組定義與用法詳解

    Java對象數(shù)組定義與用法詳解

    這篇文章主要介紹了Java對象數(shù)組定義與用法,結(jié)合實(shí)例形式分析了java對象數(shù)組的概念、功能、定義與使用方法,需要的朋友可以參考下
    2019-08-08
  • Java使用NIO包實(shí)現(xiàn)Socket通信的實(shí)例代碼

    Java使用NIO包實(shí)現(xiàn)Socket通信的實(shí)例代碼

    本篇文章主要介紹了Java使用NIO包實(shí)現(xiàn)Socket通信的實(shí)例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-02-02
  • Java精品項(xiàng)目瑞吉外賣之后端登錄功能篇

    Java精品項(xiàng)目瑞吉外賣之后端登錄功能篇

    這篇文章主要為大家詳細(xì)介紹了java精品項(xiàng)目-瑞吉外賣訂餐系統(tǒng),此項(xiàng)目過大,分為多章獨(dú)立講解,本篇內(nèi)容為后端登錄功能的實(shí)現(xiàn),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-05-05

最新評論

乌恰县| 门头沟区| 榆社县| 七台河市| 巴彦县| 广东省| 新田县| 宝坻区| 安多县| 富顺县| 桃园县| 锦州市| 盐亭县| 无极县| 凤台县| 钟山县| 长子县| 新民市| 鸡西市| 安丘市| 柞水县| 和平区| 关岭| 巴青县| 柳林县| 东乡| 夏河县| 安国市| 洛浦县| 库车县| 会同县| 固安县| 文山县| 五指山市| 商南县| 中江县| 河津市| 景宁| 永川市| 龙南县| 清新县|