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

使用自定義注解進(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開(kāi)發(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)注解。

下面我們來(lái)看一個(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 "的長(zhǎng)度只能在{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?security需求分析與基礎(chǔ)環(huán)境準(zhǔn)備教程

    spring?security需求分析與基礎(chǔ)環(huán)境準(zhǔn)備教程

    這篇文章主要為大家介紹了spring?security需求分析與基礎(chǔ)環(huán)境準(zhǔn)備教程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步
    2022-03-03
  • 深入理解JVM之Java對(duì)象的創(chuàng)建、內(nèi)存布局、訪問(wèn)定位詳解

    深入理解JVM之Java對(duì)象的創(chuàng)建、內(nèi)存布局、訪問(wèn)定位詳解

    這篇文章主要介紹了深入理解JVM之Java對(duì)象的創(chuàng)建、內(nèi)存布局、訪問(wèn)定位,結(jié)合實(shí)例形式詳細(xì)分析了Java對(duì)象的創(chuàng)建、內(nèi)存布局、訪問(wèn)定位相關(guān)概念、原理、操作技巧與注意事項(xiàng),需要的朋友可以參考下
    2019-09-09
  • Java中使用opencsv讀寫csv文件示例

    Java中使用opencsv讀寫csv文件示例

    這篇文章主要介紹了Java中使用opencsv讀寫csv文件示例,本文給出了讀CSV文件、寫CSV文件、自定義分隔符、生成Javabeans等內(nèi)容,需要的朋友可以參考下
    2015-04-04
  • Java自然排序Comparable使用方法解析

    Java自然排序Comparable使用方法解析

    這篇文章主要介紹了Java自然排序Comparable使用方法解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-04-04
  • Java split()方法中的特殊符號(hào)舉例詳解

    Java split()方法中的特殊符號(hào)舉例詳解

    Java中的split方法可以將一個(gè)字符串按照指定的分隔符進(jìn)行分割,返回一個(gè)字符串?dāng)?shù)組,這篇文章主要給大家介紹了關(guān)于Java split()方法中的特殊符號(hào)的相關(guān)資料,需要的朋友可以參考下
    2023-07-07
  • Java中的abstract和interface

    Java中的abstract和interface

    abstract和interface關(guān)鍵字在Java中隨處可見(jiàn),它是Java三大特性封裝、繼承、多態(tài)特性的實(shí)現(xiàn)重要支柱之一。interface關(guān)鍵字用于定義接口抽象,其本質(zhì)上是用于定義類型、定義類所具有的能力,下面來(lái)看看詳細(xì)內(nèi)容,需要的朋友可以參考一下
    2021-11-11
  • SpringBoot項(xiàng)目沒(méi)有把依賴的jar包一起打包的問(wèn)題解決

    SpringBoot項(xiàng)目沒(méi)有把依賴的jar包一起打包的問(wèn)題解決

    這篇文章主要介紹了SpringBoot項(xiàng)目沒(méi)有把依賴的jar包一起打包的問(wèn)題解決,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-09-09
  • Java動(dòng)態(tài)代理實(shí)現(xiàn)_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    Java動(dòng)態(tài)代理實(shí)現(xiàn)_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    動(dòng)態(tài)代理作為代理模式的一種擴(kuò)展形式,廣泛應(yīng)用于框架(尤其是基于AOP的框架)的設(shè)計(jì)與開(kāi)發(fā),本文將通過(guò)實(shí)例來(lái)講解Java動(dòng)態(tài)代理的實(shí)現(xiàn)過(guò)程
    2017-08-08
  • java判斷兩個(gè)時(shí)間是不是同一天的方法

    java判斷兩個(gè)時(shí)間是不是同一天的方法

    這篇文章主要介紹了java判斷兩個(gè)時(shí)間是不是同一天的方法,需要的朋友可以參考下
    2014-02-02
  • Java Benchmark 基準(zhǔn)測(cè)試的實(shí)例詳解

    Java Benchmark 基準(zhǔn)測(cè)試的實(shí)例詳解

    這篇文章主要介紹了Java Benchmark 基準(zhǔn)測(cè)試的實(shí)例詳解的相關(guān)資料,這里提供實(shí)例幫助大家學(xué)習(xí)理解這部分內(nèi)容,需要的朋友可以參考下
    2017-08-08

最新評(píng)論

望谟县| 凤凰县| 电白县| 栾川县| 邹城市| 高邑县| 盘山县| 顺义区| 绥阳县| 谢通门县| 阿拉善盟| 略阳县| 涪陵区| 阿城市| 济南市| 田东县| 桃源县| 城步| 惠州市| 上栗县| 读书| 永泰县| 水富县| 安图县| 缙云县| 肥东县| 阳东县| 海丰县| 宁陕县| 西盟| 瓦房店市| 临海市| 丰城市| 山西省| 成安县| 吐鲁番市| 巴林左旗| 凤山市| 枣阳市| 淮北市| 若羌县|