国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

注解實現(xiàn)校驗接口傳參是否超出取值范圍

這篇具有很好參考價值的文章主要介紹了注解實現(xiàn)校驗接口傳參是否超出取值范圍。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。


寫接口,Dto里很多字段要檢驗傳參范圍,自定義個注解來校驗。

1、定義注解

注解定義代碼:

import javax.validation.Constraint;
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
import javax.validation.Payload;
import java.lang.annotation.*;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;


@Target(ElementType.FIELD)
@Constraint(validatedBy = ListValue.ValidIfInRange.class)   //借助@Constraint注解實現(xiàn)自定義校驗邏輯,validatedBy屬性是數(shù)組類型,可同時定義多種校驗邏輯
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface ListValue {

    String message() default "The parameters are out of range, please check it.";  //超出取值范圍后的拋錯信息

    String[] valueList() default {};   //要檢驗的取值范圍

    Class<?>[] groups() default {};

    Class<? extends Payload>[] payload() default {};

    class ValidIfInRange implements ConstraintValidator<ListValue, String> {

        private final Set<String> set = new HashSet<>();

        /**
         * 初始化邏輯,把取值范圍存入Collection集合
         */
        @Override
        public void initialize(ListValue constraintAnnotation) {
            String[] values = constraintAnnotation.valueList();  
            set.addAll(Arrays.asList(values));
        }

        /**
         * 校驗邏輯,返回false即值不存在,代表超出范圍
         */
        @Override
        public boolean isValid(String s, ConstraintValidatorContext constraintValidatorContext) {
            return set.contains(s);
        }
    }
}

實現(xiàn)思路是使用JSR303校驗框架的@Constraint注解,實現(xiàn)ConstraintValidator接口,定義初始化和參數(shù)校驗邏輯。

<!--PS: JSR303校驗框架依賴-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-validation</artifactId>
</dependency>

2、使用注解

@PostMapping("/test")
public void doSome3(@Validated @RequestBody Dto dto){

}
public class Dto {

	@ListValue(valueList = {"createTime", "updateTime"}, message ="排序字段超出取值范圍")
	String orderField;
	
}	

調(diào)用下:

注解實現(xiàn)校驗接口傳參是否超出取值范圍,JavaDev,java,spring,springboot
注解實現(xiàn)校驗接口傳參是否超出取值范圍,JavaDev,java,spring,springboot

3、其余校驗實現(xiàn)思路2.0

借用 @JsonCreator 注解,反序列化前端傳參成一個枚舉對象時,進(jìn)行校驗。

@AllArgsConstructor
@Getter
public enum OrderFieldEnum {

    CREATE_TIME("createTime","create_time"),
    USER_NAME("userName","user_name");

    private final String value;
    private final String field;
    private static final Map<String,OrderFieldEnum> map = new HashMap<>(3);

    @JsonCreator
    public static OrderFieldEnum unSerializer(String value){
    	//把以value為key,以枚舉對象為value,存進(jìn)map
        if(map.isEmpty()){
            for (OrderFieldEnum fieldEnum : OrderFieldEnum.values()) {
                map.put(fieldEnum.value,fieldEnum);
            }
        }
        //map中找不到就是超出范圍
        if(!map.containsKey(value)){
            throw new RuntimeException("超出范圍");
        }
        return map.get(value);
    }

    @JsonValue
    public String getValue(){
        return this.value;   
    }


}

此時Dto:

public class Dto {
	
	OrderFieldEnum orderField;
	
}

4、其余校驗實現(xiàn)思路3.0

這個就比較原始了,直接枚舉類定義靜態(tài)代碼塊完成取值范圍初始化 + 一個靜態(tài)方法完成校驗:

注解實現(xiàn)校驗接口傳參是否超出取值范圍,JavaDev,java,spring,springboot

這么實現(xiàn)的話,Service層就得調(diào)用方法校驗下:

@Service
public Service implements IService{

	@Override
	public doSome(Dto dto){
		FieldEnum.checkCodeExist(dto.getField);
		//....
	}
}

其余優(yōu)秀帖子備份:https://juejin.cn/post/7009190724214194207文章來源地址http://www.zghlxwxcb.cn/news/detail-812770.html

到了這里,關(guān)于注解實現(xiàn)校驗接口傳參是否超出取值范圍的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • java基本數(shù)據(jù)類型取值范圍

    在JAVA中一共有八種基本數(shù)據(jù)類型,他們分別是? byte、short、int、long、float、double、char、boolean? 整型? 其中byte、short、int、long都是表示整數(shù)的,只不過他們的取值范圍不一樣? byte的取值范圍為-128~127,占用1個字節(jié)(-2的7次方到2的7次方-1)? short的取值范圍為-32768~32767,占用

    2024年02月12日
    瀏覽(19)
  • signed char 與 unsigned char 的取值范圍

    signed char 與 unsigned char 的取值范圍

    ? ???《C語言趣味教程》??? 猛戳訂閱?。?! 在講解數(shù)據(jù)類型前,我們不得不先講解一些必備的知識點,比如如何定義一個變量,數(shù)據(jù)類型的基本概念。并介紹 ASCII 碼,為 char 類型的講解做必要的鋪墊。然后講解原碼反碼和補碼,講解 IEEE754標(biāo)準(zhǔn)時需要這部分的知識作為基

    2024年02月13日
    瀏覽(29)
  • java 自定義xss校驗注解實現(xiàn)

    java 自定義xss校驗注解實現(xiàn)

    自定義一個注解@Xss。名字隨意 validator校驗類:XssValidator。這個校驗類要和上面的@Xss注解上的 @Constraint(validatedBy = { XssValidator.class })對應(yīng) 具體使用在某個字段上加上注解;形如: 然后在控制層中增加@Validated注解校驗就可以了 ?以上代碼實現(xiàn)后。會自動針對某些增加了@Xss字符

    2024年02月14日
    瀏覽(20)
  • MySQL中IN的取值范圍較大時會導(dǎo)致索引失效

    MySQL中IN的取值范圍較大時會導(dǎo)致索引失效

    結(jié)論:IN肯定會走索引,但是當(dāng)IN的取值范圍較大時會導(dǎo)致 索引失效,走全表掃描 navicat可視化工具使用explain函數(shù)查看sql執(zhí)行信息 1.1 場景1:當(dāng)IN中的取值只有一個主鍵時 我們只需要注意一個最重要的type 的信息很明顯的提現(xiàn)是否用到索引: type結(jié)果值從好到壞依次是: syste

    2024年02月15日
    瀏覽(28)
  • 后端表情包依賴+自定義注解實現(xiàn)校驗

    開發(fā)過程中遇到小程序登記信息填寫文本時可能輸入表情包,需要后端校驗 由于字段太多,所以用自定義注解的方式來實現(xiàn) 步驟1:在pom文件中加入表情包依賴 步驟2: 自定義注解類 步驟3: 在請求的實體使用這個注解,需要要在controller中加入@Validated注解,校驗才會生效

    2024年02月16日
    瀏覽(27)
  • Java自定義校驗注解實現(xiàn)List、set集合字段唯一性校驗

    Java自定義校驗注解實現(xiàn)List、set集合字段唯一性校驗

    在開發(fā)過程中,前端給后端傳遞集合,并且需要保證集合的實體類中的某些字段必須是惟一的,不能重復(fù)。 傳遞的集合: 集合對應(yīng)的實體類: 如果我們要保證傳遞的name或者card必須是唯一的,不能重復(fù),應(yīng)該如何實現(xiàn)呢,此時可以通過自定義注解的方式實現(xiàn)。 @Documented @Do

    2024年02月14日
    瀏覽(57)
  • 刪除維護(hù)計劃時報錯:索引超出范圍必 須為?負(fù)值并?于集合??

    問題:刪除維護(hù)計劃時報錯:索引超出范圍必 須為?負(fù)值并?于集合?? 在SQL Server 2016上刪除已運行維護(hù)計劃后,維護(hù)計劃job沒有自動刪除掉,手工再刪除維護(hù)計劃job,提示刪除失敗。 錯誤現(xiàn)象:delete??語句與 reference 約束\\\"FK_subplan_job_id\\\"沖突。該沖突發(fā)生于數(shù)據(jù)庫\\\"msdb\\\",表

    2024年02月11日
    瀏覽(14)
  • Spring中@Value注解取值為null問題排查

    Spring中@Value注解取值為null問題排查

    一、背景 近期應(yīng)用中因業(yè)務(wù)迭代需要接入 user 客戶端,接入后總是啟動失敗,報注冊 user bean 依賴的配置屬性為 null(如 appName,group 等都為空),示例代碼如下: 二、@Value 取值為 null 原因分析 2.1. @Value 取值為 null 常見原因分析 常見現(xiàn)象一:類沒有交給 Spring 管理,比如類沒

    2024年02月10日
    瀏覽(18)
  • mysql如何實現(xiàn)根據(jù)經(jīng)緯度判斷某一個坐標(biāo)是否在一個多邊形區(qū)域范圍內(nèi)

    mysql如何實現(xiàn)根據(jù)經(jīng)緯度判斷某一個坐標(biāo)是否在一個多邊形區(qū)域范圍內(nèi)

    要根據(jù)經(jīng)緯度判斷一個坐標(biāo)是否在一個多邊形區(qū)域內(nèi),MySQL提供了幾種函數(shù)來處理地理空間數(shù)據(jù),其中包括用于處理多邊形區(qū)域的函數(shù)。 首先,創(chuàng)建一個表來存儲多邊形區(qū)域。可以使用 ST_GeomFromText 函數(shù)將多邊形的坐標(biāo)轉(zhuǎn)換為地理空間對象。我們給他插入兩條數(shù)據(jù),默認(rèn)id第一

    2024年02月08日
    瀏覽(133)
  • 關(guān)于微信小程序、字節(jié)小程序rich-text中圖片寬度超出范圍解決辦法

    關(guān)于微信小程序、字節(jié)小程序rich-text中圖片寬度超出范圍解決辦法

    微信小程序和字節(jié)小程序中的rich-text可以將后臺富文本顯示在前端,但是當(dāng)圖片過寬時微信小程序中就會超出顯示范圍,而字節(jié)小程序中卻不會。(微信開發(fā)者是不是該優(yōu)化下這個控件了 ) 微信小程序中 ? ?字節(jié)小程序中 ? ?那就解決微信小程序中的顯示問題就可以了,可

    2024年02月11日
    瀏覽(20)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包