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

如何優(yōu)雅的寫代碼-替代大量if else的@valid、@validated注解

這篇具有很好參考價值的文章主要介紹了如何優(yōu)雅的寫代碼-替代大量if else的@valid、@validated注解。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

@Valid 注解通常用于對象屬性字段的規(guī)則檢測,具體啥意思,下面讓我娓娓道來:

下面我們以新增一個員工為功能切入點,以常規(guī)寫法為背景,慢慢烘托出 @Valid 注解用法詳解。

那么,首先,我們會有一個員工對象 Employee,如下 :首先我們會有一個員工對象 Employee,如下 :

/**
 * 員工對象
 * 
 * @author sunnyzyq
 * @since 2019/12/13
 */
public class Employee {
 
    /** 姓名 */
    public String name;
 
    /** 年齡 */
    public Integer age;
 
    public String getName() {
        return name;
    }
 
    public void setName(String name) {
        this.name = name;
    }
 
    public Integer getAge() {
        return age;
    }
 
    public void setAge(Integer age) {
        this.age = age;
    }
 
}

然后 Cotroller 中會有一個對應(yīng)都新增方法 add(),如下:


@Controller
public class TestController {
 
    @RequestMapping("/add")
    @ResponseBody
    public String add(Employee employee) {
        // TODO 保存到數(shù)據(jù)庫
        return "新增員工成功";
    }
 
}

現(xiàn)在要求:員工的名稱不能為空,且長度不能超過10個字符,那么我們以前的做法大致如下:
如何優(yōu)雅的寫代碼-替代大量if else的@valid、@validated注解,java
寫完,我們啟動項目測試下:
如何優(yōu)雅的寫代碼-替代大量if else的@valid、@validated注解,java
可以看到,和我們料想中的一樣,毫無問題。

除了名稱外,我們規(guī)定年齡也是必填項,且范圍在1到100歲,那么此時,我們需要增加對應(yīng)判定代碼如下:
在這里插入圖片描述
那么問題來了,現(xiàn)在員工對象 Employee 就 2 個字段,我們就寫了 10 多行的代碼驗證,要是有20個字段,豈不是要寫 100 多行代碼?通常來說,當(dāng)一個方法中的無效業(yè)務(wù)代碼量過多時,往往代碼設(shè)計有問題,當(dāng)然這不是我們所想看到都結(jié)果。

那么如何解決呢?首先大家應(yīng)該會想到將對應(yīng)的驗證過程抽成一個驗證方法,如下:
這樣來看,我們的業(yè)務(wù)方法就清爽多了。
在這里插入圖片描述
但這種方式只是抽了一個方法,有一種換湯不換藥的感覺,雖然業(yè)務(wù)方法看起來清爽了很多,但書寫代碼量并沒有下降,反而還多出了一個方法,這也不是我們理想中的樣子。

此時,我們引出 Spring 中的 @valid 注解,這些問題就可以迎刃而解了,具體如下:

首先,我們在 Maven 配置中引入 @valid 的依賴:

如果你是 springboot 項目,那么可以不用引入了,已經(jīng)引入了,他就存在于最核心的 web 開發(fā)包里面。

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <version>2.0.5.RELEASE</version>
</dependency>

如果你不是 springboot 項目,那么引入下面依賴即可:

<dependency>
    <groupId>javax.validation</groupId>
    <artifactId>validation-api</artifactId>
    <version>1.1.0.Final</version>
</dependency>
 
<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-validator</artifactId>
    <version>5.4.1.Final</version>
</dependency>

那么針對上面情景,我們可以對我們的代碼進行優(yōu)化了。

首先我們在 Employee 類的屬性上打上如下注解:

package com.zyq.beans;
 
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
 
import org.hibernate.validator.constraints.Length;
import org.hibernate.validator.constraints.Range;
 
/**
 * 員工對象
 * 
 * @author sunnyzyq
 * @since 2019/12/13
 */
public class Employee {
 
    /** 姓名 */
    @NotBlank(message = "請輸入名稱")
    @Length(message = "名稱不能超過個 {max} 字符", max = 10)
    public String name;
 
    /** 年齡 */
    @NotNull(message = "請輸入年齡")
    @Range(message = "年齡范圍為 {min} 到 {max} 之間", min = 1, max = 100)
    public Integer age;
 
    public String getName() {
        return name;
    }
 
    public void setName(String name) {
        this.name = name;
    }
 
    public Integer getAge() {
        return age;
    }
 
    public void setAge(Integer age) {
        this.age = age;
    }
 
}

然后再 Controller 對應(yīng)方法上,對這個員工標(biāo)上 @Valid 注解,表示我們對這個對象屬性需要進行驗證,
如何優(yōu)雅的寫代碼-替代大量if else的@valid、@validated注解,java

既然驗證,那么就肯定會有驗證結(jié)果,所以我們需要用一個東西來存放驗證結(jié)果,做法也很簡單,在參數(shù)直接添加一個BindingResult,具體如下:
如何優(yōu)雅的寫代碼-替代大量if else的@valid、@validated注解,java
對應(yīng)獲取驗證結(jié)果的代碼如下:
如何優(yōu)雅的寫代碼-替代大量if else的@valid、@validated注解,java

OK ! 萬事俱備 !我們進行測試下:
如何優(yōu)雅的寫代碼-替代大量if else的@valid、@validated注解,java
可以看到,代碼不但簡潔了很多,結(jié)果和預(yù)期的也一模一樣!很棒吧?。?/p>

常用注解:

除了剛剛都注解,最后再附加2個常用注解,我就直接貼圖了,基本上這6個注解可以解決99%的字段,其他注解我就不貼圖了,如果不滿足,自己問百度。

如何優(yōu)雅的寫代碼-替代大量if else的@valid、@validated注解,java
全部注解:
如何優(yōu)雅的寫代碼-替代大量if else的@valid、@validated注解,java文章來源地址http://www.zghlxwxcb.cn/news/detail-800042.html

到了這里,關(guān)于如何優(yōu)雅的寫代碼-替代大量if else的@valid、@validated注解的文章就介紹完了。如果您還想了解更多內(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īng)查實,立即刪除!

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

相關(guān)文章

  • 為什么很多程序員不用switch,而是大量 的if......else if?

    不會吧還有人用if else和switch case?三目運算符? 不會吧? 不會吧?大佬都是全都不用的!以JAVA為例 條件判斷語句的四種寫法,茴字的四種寫法大家不會不知道吧 1.正常人寫法: //輸出 :張三應(yīng)該去男廁所 2.Lambda策略模式寫法: 某些大公司P6級別以上(年薪30w-50w)標(biāo)準(zhǔn)寫法

    2024年02月15日
    瀏覽(21)
  • java如何優(yōu)雅的實現(xiàn)參數(shù)非空校驗,快速實現(xiàn)參數(shù)非空校驗,使用@valid實現(xiàn)參數(shù)非空校驗

    在java項目接口中,有些必傳參數(shù)需要進行非空校驗,如果參數(shù)過多,代碼會繁雜且冗余,如何優(yōu)雅的對參數(shù)進行非空校驗,下面是實現(xiàn)流程 用實體類接收參數(shù),使用非空注解編輯參數(shù)內(nèi)容 使用 @Valid 注解對參數(shù)進行攔截,整體進行非空校驗 如果是SpringBoot項目,引入web開發(fā)包

    2024年02月08日
    瀏覽(25)
  • Java中使用工廠模式和策略模式優(yōu)雅消除if-else語句(UML類圖+案例分析)

    ?前言:在最近的后端開發(fā)中,多多少少會發(fā)現(xiàn)有很多if-else語句,如果條件過多則會造成整體代碼看起來非常臃腫,這邊我就舉一個我在實際開發(fā)中的例子,來進行闡述這兩種模式在實際開發(fā)中我是如何運用的。 目錄 一、工廠模式簡介 二、簡單工廠模式 2.1、UML類圖

    2024年02月15日
    瀏覽(20)
  • 【算法】Check If Word Is Valid After Substitutions 檢查替換后的詞是否有效

    給你一個字符串 s ,請你判斷它是否 有效 。 字符串 s 有效 需要滿足:假設(shè)開始有一個空字符串 t = “” ,你可以執(zhí)行 任意次 下述操作將 t 轉(zhuǎn)換為 s : 將字符串 “abc” 插入到 t 中的任意位置。形式上,t 變?yōu)?tleft + “abc” + tright,其中 t == tleft + tright 。注意,tleft 和 tri

    2024年02月02日
    瀏覽(20)
  • 五個步驟,助你優(yōu)雅的寫好 Controller 層代碼!

    五個步驟,助你優(yōu)雅的寫好 Controller 層代碼!

    Controller 層邏輯 普通寫法 優(yōu)化思路 MVC架構(gòu)下,我們的web工程結(jié)構(gòu)會分為三層,自下而上是dao層,service層和controller層。controller層為控制層,主要處理外部請求,調(diào)用service層。 一般情況下,controller層不應(yīng)該包含業(yè)務(wù)邏輯,controller的功能應(yīng)該有以下五點: ⑴、接收請求并解析

    2024年02月10日
    瀏覽(11)
  • 如何優(yōu)雅的寫個try catch的方式!

    如何優(yōu)雅的寫個try catch的方式!

    丑陋的 try catch 代碼塊 優(yōu)雅的 Controller 上面的示例,還只是在 Controller 層,如果是在 Service 層,可能會有更多的 try catch 代碼塊。這將會嚴(yán)重影響代碼的可讀性、“美觀性”。 所以如果是我的話,我肯定偏向于第二種,我可以把更多的精力放在業(yè)務(wù)代碼的開發(fā),同時代碼也會

    2024年02月01日
    瀏覽(28)
  • Go如何優(yōu)雅的寫數(shù)據(jù)庫的單測

    Go如何優(yōu)雅的寫數(shù)據(jù)庫的單測

    ?當(dāng)你想在代碼中測試 Gorm 時,可以考慮使用單元測試或集成測試來確保 Gorm 的功能正常。下面是一個簡單的示例,展示了如何編寫一個基本的 Gorm 單元測試。 app config config.yaml conf.go services project.go project_test.go init_test.go cmd main.go rootDir, err := os.Getwd() : os.Getwd() 函數(shù)用于獲取當(dāng)

    2024年02月03日
    瀏覽(25)
  • Java代碼瘦身,巧用 @Valid,@Validated 的分組校驗和嵌套檢驗,實現(xiàn)高階參數(shù)校驗操作

    Java代碼瘦身,巧用 @Valid,@Validated 的分組校驗和嵌套檢驗,實現(xiàn)高階參數(shù)校驗操作

    ? ? ? ? 在 JavaEE 項目中, RestFull 層接收參數(shù)首先要對一些字段的格式進行校驗,以防止所有查詢都落到數(shù)據(jù)庫,這也是一種合理的限流手段。以前基本上都是用 if...else...,這樣的代碼太啰嗦,除了使用策略模式進行優(yōu)化,今天介紹一下校驗注解@Valid,@Validated和@PathVariable,

    2024年02月04日
    瀏覽(24)
  • 【狀態(tài)模式】拯救if-else堆出來的屎山代碼

    【狀態(tài)模式】拯救if-else堆出來的屎山代碼

    我想大家平時都在開發(fā)重都遇見過屎山代碼,這些屎山代碼一般都是由于復(fù)雜且龐大的if-else造成的,狀態(tài)模式,是一種很好的優(yōu)化屎山代碼的設(shè)計模式,本文將采用兩個業(yè)務(wù)場景的示例來講解如何使用狀態(tài)模式拯救屎山代碼。 目錄 前言 1.網(wǎng)購業(yè)務(wù)場景 1.1.需求 1.2.if else的實

    2024年02月12日
    瀏覽(17)
  • 用策略模式加工廠模式優(yōu)化多重if-else或者switch代碼

    情景:通過不同的出行方式和數(shù)量拿到不同的減碳量 代碼從controller開始貼 是為了更貼近真實場景 原始代碼 controller: 枚舉類: TravelEnum: service: 改進: controller: swevice: 其中 GreenTravelModeService 是一個接口: GreenTravelModeService 有三個實現(xiàn)類,分別代表 三種不同出行方式獲得減碳的

    2024年02月03日
    瀏覽(19)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包