国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

方法入?yún)⑿r?yàn)工具

xushaojieaaa / 2393人閱讀

摘要:介紹出發(fā)點(diǎn)在日常開(kāi)發(fā)中經(jīng)常需要對(duì)方法的入?yún)⒆鲂r?yàn),特別是在遠(yuǎn)程調(diào)用的方法中。類字段無(wú)參方法方法參數(shù)為或數(shù)組或集合類型提供長(zhǎng)度或大小校驗(yàn)。類非靜態(tài)方法方法參數(shù)指定參數(shù)校驗(yàn)失敗時(shí)拋出異常。方法方法參數(shù)禁用校驗(yàn)邏輯。

介紹 出發(fā)點(diǎn)

在日常開(kāi)發(fā)中經(jīng)常需要對(duì)方法的入?yún)⒆鲂r?yàn),特別是在遠(yuǎn)程調(diào)用的方法中。

我基于這個(gè)需求便開(kāi)發(fā)了這款工具,可以節(jié)省在這方面所花費(fèi)的精力,通過(guò)配置的注解,在編譯期對(duì)語(yǔ)法樹(shù)進(jìn)行修改,就能為方法加入?yún)?shù)的校驗(yàn)邏輯。

知道Lombok的同學(xué)肯定不少吧,其實(shí)原理都是一樣的。

功能

現(xiàn)在所支持的校驗(yàn)有數(shù)字、字符串、數(shù)組、集合和Map,并且能夠在校驗(yàn)失敗時(shí)選擇是拋出異?;蚍祷?cái)?shù)據(jù)。

下面讓我們直接先看下使用效果吧。

public class MyApp {

    @Throw
    public Info run(Args args,
                    @Nullable Info info,
                    @Return({"test", "0"}) @NotBlank String name,
                    @Return("null") @NumberRule(min = "1") int num) {
        // process
        System.out.println("run");
        return new Info();
    }
}

如上代碼,經(jīng)過(guò)編譯后將會(huì)是這樣的 :

public class MyApp {
    public MyApp() {
    }
    public MyApp.Info run(MyApp.Args args, MyApp.Info info, String name, int num) {
        if (args == null) {
            throw new IllegalArgumentException("Invalid input parameter, cause args is null");
        } else {
            String mvar_0 = args.invalid0();
            if (mvar_0 != null) {
                throw new IllegalArgumentException("Invalid input parameter, cause " + mvar_0);
            } else {
                if (info != null) {
                    mvar_0 = info.invalid0();
                    if (mvar_0 != null) {
                        throw new IllegalArgumentException("Invalid input parameter, cause " + mvar_0);
                    }
                }

                if (name == null) {
                    return new MyApp.Info("test", (Double)null);
                } else if (Util.isBlank(name)) {
                    return new MyApp.Info("test", (Double)null);
                } else if (num < 1) {
                    return null;
                } else {
                    System.out.println("run");
                    return new MyApp.Info();
                }
            }
        }
    }
}

原始的邏輯 System.out.println("run"); new Info(); 被放置在了最后,當(dāng)調(diào)用時(shí)參數(shù)校驗(yàn)都通過(guò)后才會(huì)執(zhí)行。
其實(shí)例子中的代碼省略了對(duì)參數(shù)定義校驗(yàn)注解的部分,這些類在經(jīng)過(guò)編譯器后將會(huì)生成參數(shù)的校驗(yàn)方法。。。完整的代碼如下

public class MyApp {

    @Throw
    public Info run(Args args,
                    @Nullable Info info,
                    @Return({"test", "null"}) @NotBlank String name,
                    @Return("null") @NumberRule(min = "1") int num) {
        // process
        System.out.println("run");
        return new Info();
    }

    class Args {

        @NumberRule(max = "1000") int id;

        @NotNull HashMap param;

        @Nullable @SizeRule(min = 5) boolean[] value;
    }

    static class Info {

        @SizeRule(min = 50) String name;

        @Nullable @NumberRule(min = "-25.02", max = "200") Double price;

        @SizeRule(min = 10, max = 10) List extra;

        public Info() {
        }

        Info(String name, Double price) {
            this.name = name;
            this.price = price;
        }
    }
}

其中的 ArgsInfo 在經(jīng)過(guò)編譯后將會(huì)根據(jù)定義的注解生成校驗(yàn)方法。

   static class Info {
       String name;
       Double price;
       List extra;

       public Info() {
       }

       Info(String name, Double price) {
           this.name = name;
           this.price = price;
       }

       public String invalid0() {
           if (this.name == null) {
               return "name is null";
           } else if (this.name.length() < 50) {
               return "name.length() less than 50";
           } else if (this.price != null && this.price > 200.0D) {
               return "price great than 200.0";
           } else if (this.extra == null) {
               return "extra is null";
           } else {
               return this.extra.size() != 10 ? "extra cannot equals 10" : null;
           }
       }
   }

   class Args {
       int id;
       HashMap param;
       boolean[] value;

       Args() {
       }

       public String invalid0() {
           if (this.value != null && this.value.length < 5) {
               return "value.length less than 5";
           } else if (this.id > 1000) {
               return "id great than 1000";
           } else {
               return this.param == null ? "param is null" : null;
           }
       }
   }

看到這兒,你應(yīng)該對(duì)這個(gè)工具的基本功能有了大概的了解,下面我會(huì)介紹如果使用這個(gè)工具。

使用說(shuō)明 1.添加依賴

Maven


    
        io.github.moyada
        medivh
        1.2.0
        provided
    

Gradle

dependencies {
  compileOnly "io.github.moyada:medivh:1.2.0"
}

如果沒(méi)有使用構(gòu)建工具也沒(méi)問(wèn)題,可以從網(wǎng)上下載jar包,一樣配置,在后面用 javac -cp 編譯就好了。

2. 配置注解

現(xiàn)在可供使用的注解有這幾種,支持以類、枚舉、接口作為參數(shù)添加校驗(yàn)規(guī)則。

注解 作用域 作用
@NotNull 類字段、無(wú)參方法、方法參數(shù) 為對(duì)象類型的字段或返回值提供非空校驗(yàn),默認(rèn)定義了規(guī)則都會(huì)進(jìn)行非空校驗(yàn)。
@Nullable 類字段、無(wú)參方法、方法參數(shù) 不進(jìn)行非空校驗(yàn)。
@NotBlank 類字段、無(wú)參方法、方法參數(shù) 對(duì) String 類型提供不可為空白字符串檢測(cè)。
@SizeRule 類字段、無(wú)參方法、方法參數(shù) 為 String 或 數(shù)組 或 集合 類型提供長(zhǎng)度或大小校驗(yàn)。
@NumberRule 類字段、無(wú)參方法、方法參數(shù) 為基礎(chǔ)數(shù)字類型提供大小校驗(yàn)。
@Throw 類、非靜態(tài)方法、方法參數(shù) 指定參數(shù)校驗(yàn)失敗時(shí)拋出異常。
@Return 非靜態(tài)方法、方法參數(shù) 指定參數(shù)校驗(yàn)失敗時(shí)返回?cái)?shù)據(jù)。
@Exclusive 方法、方法參數(shù) 禁用校驗(yàn)邏輯。
@Variable 非靜態(tài)方法、類 修改當(dāng)前作用域下校驗(yàn)邏輯產(chǎn)生的變量名和方法名。

例如我需要提供一個(gè)判斷String是否為null或空白字符串的方法。

@Return("true")
public boolean isEmpty(@NotBlank String str) {
    return false;
}
3. 編譯項(xiàng)目

使用構(gòu)建工具的編譯命令, 如 mvn compilegradle build。

或者使用 Java 命令進(jìn)行編譯,如 javac -cp medivh.jar MyApp.java

如上述代碼,經(jīng)過(guò)編譯期后,即可生成方法邏輯,并且創(chuàng)建一個(gè) io.moyada.medivh.support.Util 類提供檢驗(yàn)是否為空白字符串的方法,當(dāng)然也支持自己指定方法。

public boolean isEmpty(String str) {
    if (str == null) {
        return true;
    } else {
        return Util.isBlank(str);
    }
}
結(jié)尾

看完這份介紹,如果有興趣的同學(xué)還可以前往 github 查看,會(huì)有更詳細(xì)的文檔和示例,歡迎大家進(jìn)行使用和提出意見(jiàn)。

github.com/moyada/medivh

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/72828.html

相關(guān)文章

  • 給研發(fā)工程師的代碼質(zhì)量利器 | SOFAChannel#5 直播整理

    摘要:接入分為兩部分,其一是可視化編輯器,在官網(wǎng)上我們可以獲取該編輯器的安裝包,并通過(guò)的插件管理進(jìn)行安裝。借助可視化編輯器,在整個(gè)過(guò)程中我們可以替換大部分手工編寫代碼的工作,進(jìn)行一站式操作。,有趣實(shí)用的分布式架構(gòu)頻道。本文根據(jù) SOFAChannel#5 直播分享整理,主題:給研發(fā)工程師的代碼質(zhì)量利器 —— 自動(dòng)化測(cè)試框架 SOFAActs?;仡櫼曨l以及 PPT 查看地址見(jiàn)文末。歡迎加入直播互動(dòng)釘...

    ivan_qhz 評(píng)論0 收藏0
  • 不用寫代碼,也能做好接口測(cè)試

    摘要:接口測(cè)試形式單個(gè)接口測(cè)試包含性能測(cè)試和通過(guò)接口調(diào)用進(jìn)行場(chǎng)景測(cè)試。充分來(lái)說(shuō)就是接口測(cè)試相對(duì)容易實(shí)現(xiàn)自動(dòng)化持續(xù)集成。 本文你將了解到 1、接口測(cè)試基本概念,包含什么是接口,什么是接口測(cè)試,為什么要做接口測(cè)試2、接口測(cè)試用例設(shè)計(jì)3、怎樣不用寫代碼,也能快速的根據(jù)開(kāi)發(fā)的API文檔完成接口自動(dòng)化測(cè)試腳本 注:如果你對(duì)接口基本概念和接口測(cè)試用例已熟悉,可以直接跳過(guò),其實(shí)看一遍也無(wú)防,就當(dāng)作 溫故知...

    idisfkj 評(píng)論0 收藏0
  • @Validated和@Valid的區(qū)別?校驗(yàn)級(jí)聯(lián)屬性(內(nèi)部類)

    摘要:畢竟永遠(yuǎn)相信本文能給你帶來(lái)意想不到的收獲使用示例關(guān)于數(shù)據(jù)校驗(yàn)這一塊在中的使用案例,我相信但凡有點(diǎn)經(jīng)驗(yàn)的程序員應(yīng)該沒(méi)有不會(huì)使用的,并且還不乏熟練的選手。 每篇一句 NBA里有兩大笑話:一是科比沒(méi)天賦,二是詹姆斯沒(méi)技術(shù) 相關(guān)閱讀 【小家Java】深入了解數(shù)據(jù)校驗(yàn):Java Bean Validation 2.0(JSR303、JSR349、JSR380)Hibernate-Validati...

    Winer 評(píng)論0 收藏0
  • SpringMVC學(xué)習(xí)筆記

    摘要:是目前最流行的一種互聯(lián)網(wǎng)軟件架構(gòu)。協(xié)議,是一個(gè)無(wú)狀態(tài)協(xié)議,即所有的狀態(tài)都保存在服務(wù)器端。而這種轉(zhuǎn)化是建立在表現(xiàn)層之上的,所以就是表現(xiàn)層狀態(tài)轉(zhuǎn)化。具體說(shuō),就是協(xié)議里面,四個(gè)表示操作方式的動(dòng)詞。 一、SpringMVC概述 Spring為展現(xiàn)層提供的基于MVC設(shè)計(jì)理念的優(yōu)秀的Web框架,是目前最主流的MVC框架之一 Spring3.0之后全面超越Struts2,成為最優(yōu)秀的MVC框架 S...

    roundstones 評(píng)論0 收藏0
  • 從深處去掌握數(shù)據(jù)校驗(yàn)@Valid的作用(級(jí)聯(lián)校驗(yàn)

    摘要:如果說(shuō)要使用數(shù)據(jù)校驗(yàn),我十分相信小伙伴們都能夠使用,但估計(jì)大都是有個(gè)前提的環(huán)境。具體使用可參考小家讓支持對(duì)平鋪參數(shù)執(zhí)行數(shù)據(jù)校驗(yàn)?zāi)J(rèn)使用只能對(duì)進(jìn)行校驗(yàn)級(jí)聯(lián)校驗(yàn)什么叫級(jí)聯(lián)校驗(yàn),其實(shí)就是帶校驗(yàn)的成員里存在級(jí)聯(lián)對(duì)象時(shí),也要對(duì)它完成校驗(yàn)。 每篇一句 NBA里有兩大笑話:一是科比沒(méi)天賦,二是詹姆斯沒(méi)技術(shù) 相關(guān)閱讀 【小家Java】深入了解數(shù)據(jù)校驗(yàn):Java Bean Validation 2.0(...

    BlackFlagBin 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<