亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

使用自定義注解進(jìn)行restful請(qǐng)求參數(shù)的校驗(yàn)方式

 更新時(shí)間:2021年10月19日 11:59:52   作者:teng_sd_cn  
這篇文章主要介紹了使用自定義注解進(jìn)行restful請(qǐng)求參數(shù)的校驗(yàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

自定義注解進(jìn)行restful請(qǐng)求參數(shù)的校驗(yàn)

在使用springmvc開發(fā)的時(shí)候,我們通常會(huì)在controller中的方法參數(shù)實(shí)體類中加上@NotNull()等類似注解,然后在方法參數(shù)上加上

@Vilad 注解,這樣在有請(qǐng)求的時(shí)候,就會(huì)自動(dòng)按照我們的注解進(jìn)行參數(shù)是否合法,避免了我們手工的校驗(yàn)。

但是,自帶的校驗(yàn)注解有的時(shí)候并不能滿足我們的業(yè)務(wù)驗(yàn)證需求,因此,我們就有必要進(jìn)行自定義校驗(yàn)注解,以業(yè)務(wù)為需求定制我們

自己的校驗(yàn)注解。

下面我們來看一個(gè)例子:

1、首先我們使用@interface定義一個(gè)注解

@Target( { METHOD, FIELD, ANNOTATION_TYPE })
@Retention(RUNTIME)
@Constraint(validatedBy = ByteLengthValidator.class)// 使用@Constraint指定注解校驗(yàn)實(shí)現(xiàn)類,這是一個(gè)限制型注解,只能使用指定的實(shí)現(xiàn)類
@Documented
public @interface ByteLength {
    int min() default 0; 
    int max() default 2147483647; 
    String charsetName() default "GBK"; 
    String message() default "的長度只能在{min}和{max}之間"; 
    Class<?>[] groups() default {}; 
    Class<? extends Payload>[] payload() default {};
}

2、實(shí)現(xiàn)注解實(shí)現(xiàn)類(和@interface定義的注解在同一個(gè)包下)

注解實(shí)現(xiàn)類需要實(shí)現(xiàn)ConstraintValidator 接口

public class ByteLengthValidator implements ConstraintValidator<ByteLength, String>{   // 實(shí)現(xiàn)ConstraintValidator 
 int min;
 int max;
        String charsetName;
 
 @Override
 public void initialize(ByteLength constraintAnnotation) {
  this.min = constraintAnnotation.min();
  this.max = constraintAnnotation.max();
        this.charsetName = constraintAnnotation.charsetName();
 }
 
 @Override
 public boolean isValid(String value, ConstraintValidatorContext context) {   // 實(shí)現(xiàn)校驗(yàn)規(guī)則
        if (null == value) {
            return min <= 0;
        } 
        try {
            int length = value.getBytes(charsetName).length;
            return length >= min && length <= max;
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
            return false;
        }
 }
}

3、在需要校驗(yàn)的對(duì)象的字段上加上@ByteLength注解

然后在接口方法的該對(duì)象參數(shù)上加上@Vilad 注解,在接收的請(qǐng)求的時(shí)候,就會(huì)使用

我們自定義的@ByteLength 進(jìn)行校驗(yàn)該字段。

springboot小技巧:restful接口參數(shù)校驗(yàn),自定義校驗(yàn)規(guī)則

restful風(fēng)格接口參數(shù)校驗(yàn)

在這里插入圖片描述

在接收參數(shù)的實(shí)體類的屬性上添加默認(rèn)的注解或者自定義注解

在這里插入圖片描述

自定義參數(shù)校驗(yàn)注解方法

1>定義自定義注解

在這里插入圖片描述

2>定義參數(shù)校驗(yàn)邏輯的處理類

在這里插入圖片描述

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家.

相關(guān)文章

  • Spring注解@Configuration和@Component區(qū)別詳解

    Spring注解@Configuration和@Component區(qū)別詳解

    @Component和@Configuration都可以作為配置類,之前一直都沒覺得這兩個(gè)用起來有什么差別,可能有時(shí)程序跑的和自己想的有所區(qū)別也沒注意到,下面這篇文章主要給大家介紹了關(guān)于Spring注解@Configuration和@Component區(qū)別的相關(guān)資料,需要的朋友可以參考下
    2023-04-04
  • IntelliJ IDEA(2020.2)的下載、安裝步驟詳細(xì)教程

    IntelliJ IDEA(2020.2)的下載、安裝步驟詳細(xì)教程

    這篇文章主要介紹了IntelliJ IDEA(2020.2)的下載、安裝步驟詳細(xì)教程,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-08-08
  • MDC在多線程中的使用方式

    MDC在多線程中的使用方式

    這篇文章主要介紹了MDC在多線程中的使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • 閱讀EnumSet抽象類源碼

    閱讀EnumSet抽象類源碼

    這篇文章主要介紹了閱讀EnumSet抽象類源碼,具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-12-12
  • 利用Spring?boot+LogBack+MDC實(shí)現(xiàn)鏈路追蹤

    利用Spring?boot+LogBack+MDC實(shí)現(xiàn)鏈路追蹤

    這篇文章主要介紹了利用Spring?boot+LogBack+MDC實(shí)現(xiàn)鏈路追蹤,MDC?可以看成是一個(gè)與當(dāng)前線程綁定的哈希表,可以往其中添加鍵值對(duì),下文詳細(xì)介紹需要的小伙伴可以參考一下
    2022-04-04
  • Java groovy如何提升代碼運(yùn)行效率

    Java groovy如何提升代碼運(yùn)行效率

    這篇文章主要介紹了Java groovy如何提升代碼運(yùn)行效率,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-09-09
  • idea使用pagehelper實(shí)現(xiàn)后端分頁功能的步驟詳解

    idea使用pagehelper實(shí)現(xiàn)后端分頁功能的步驟詳解

    這篇文章主要介紹了idea使用pagehelper實(shí)現(xiàn)后端分頁功能的步驟,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-09-09
  • 在Java中使用redisTemplate操作緩存的方法示例

    在Java中使用redisTemplate操作緩存的方法示例

    這篇文章主要介紹了在Java中使用redisTemplate操作緩存的方法示例,在Redis中可以存儲(chǔ)String、List、Set、Hash、Zset。感興趣的可以了解一下
    2019-01-01
  • springboot啟動(dòng)時(shí)運(yùn)行代碼詳解

    springboot啟動(dòng)時(shí)運(yùn)行代碼詳解

    在本篇內(nèi)容中我們給大家整理了關(guān)于在springboot啟動(dòng)時(shí)運(yùn)行代碼的詳細(xì)圖文步驟以及需要注意的地方講解,有興趣的朋友們學(xué)習(xí)下。
    2019-06-06
  • spring cloud gateway 全局過濾器的實(shí)現(xiàn)

    spring cloud gateway 全局過濾器的實(shí)現(xiàn)

    全局過濾器作用于所有的路由,不需要單獨(dú)配置,我們可以用它來實(shí)現(xiàn)很多統(tǒng)一化處理的業(yè)務(wù)需求,這篇文章主要介紹了spring cloud gateway 全局過濾器的實(shí)現(xiàn),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2019-03-03

最新評(píng)論