欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

相關(guān)文章

  • Springboot中如何使用過(guò)濾器校驗(yàn)PSOT類型請(qǐng)求參數(shù)內(nèi)容

    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-08
  • idea中MavenWeb項(xiàng)目不能創(chuàng)建Servlet的解決方案

    idea中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)用的方法

    這篇文章主要介紹了從零開(kāi)始學(xué)springboot整合feign跨服務(wù)調(diào)用的方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-03-03
  • Java for循環(huán)Map集合優(yōu)化實(shí)現(xiàn)解析

    Java 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-01
  • Java使用OpenCV3.2實(shí)現(xiàn)視頻讀取與播放

    Java使用OpenCV3.2實(shí)現(xiàn)視頻讀取與播放

    這篇文章主要為大家詳細(xì)介紹了Java使用OpenCV3.2實(shí)現(xiàn)視頻讀取與播放,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-07-07
  • Java8利用Stream實(shí)現(xiàn)列表去重的方法詳解

    Java8利用Stream實(shí)現(xiàn)列表去重的方法詳解

    這篇文章主要為大家介紹了Java利用Stream實(shí)現(xiàn)列表去重的幾種方法詳解,文中的示例代碼講解詳細(xì),需要的小伙伴可以參考一下
    2022-04-04
  • java實(shí)現(xiàn)html轉(zhuǎn)pdf方法步驟

    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中的第三方庫(kù),文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-08-08
  • java HashMap的keyset實(shí)例

    java HashMap的keyset實(shí)例

    簡(jiǎn)單地說(shuō),在keyset方法返回的set上做修改會(huì)改變?cè)瓉?lái)hashmap,這也許不是你想要的,于是形成一個(gè)隱藏的bug
    2013-04-04
  • springboot中使用redis并且執(zhí)行調(diào)試lua腳本

    springboot中使用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-04
  • springboot+vue實(shí)現(xiàn)阿里云oss大文件分片上傳的示例代碼

    springboot+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

最新評(píng)論