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

SpringBoot中利用@Valid和@Validated進(jìn)行參數(shù)校驗(yàn)

 更新時(shí)間:2024年09月02日 08:58:56   作者:一只小白()  
為了保證數(shù)據(jù)的正確性、完整性,前后端都需要進(jìn)行數(shù)據(jù)檢驗(yàn),作為一名后端開(kāi)發(fā)工程師,不能僅僅依靠前端來(lái)校驗(yàn)數(shù)據(jù),我們還需要對(duì)接口請(qǐng)求的參數(shù)進(jìn)行后端的校驗(yàn),所以本文給大家介紹了SpringBoot中利用@Valid和@Validated進(jìn)行參數(shù)校驗(yàn),需要的朋友可以參考下

一、什么是參數(shù)校驗(yàn)

例如在某個(gè)登錄請(qǐng)求中傳遞參數(shù)包含用戶信息,需要判斷用戶信息是否為空,以及判斷郵箱是否為空等情況,正常處理會(huì)寫大量的If else 語(yǔ)句非常影響美觀,可讀性也非常低,因此提出了參數(shù)校驗(yàn)這個(gè)概念,也就是下文介紹的@Valid和@Validated注解

@Controller
@RequestMapping("/user")
public class UserControlelr {
    @PostMapping("/login")
    public String login(UserDTO userDTO){
        if (userDTO.getUsername() == null || userDTO.getUsername().isEmpty()){
            // 進(jìn)行某種操作
        }
        if(userDTO.getEmail() == null || userDTO.getEmail().isEmpty()){
            // 進(jìn)行某種操作
        }
        return "loginSuccess";
    }
}

二、@Valid和@Validated注解的異同

標(biāo)注位置

  • @Validated : 用在類、方法和方法參數(shù)上,但不能用于成員屬性。
  • @Valid:可以用在方法、構(gòu)造函數(shù)、方法參數(shù)和成員屬性上。

分組校驗(yàn)

  • @Validated :支持分組驗(yàn)證,可以更細(xì)致地控制驗(yàn)證過(guò)程。
  • @Valid:主要支持標(biāo)準(zhǔn)的Bean驗(yàn)證功能,不支持分組驗(yàn)證。

嵌套校驗(yàn)

  • @Validated :不支持嵌套驗(yàn)證。
  • @Valid:支持嵌套驗(yàn)證,可以嵌套驗(yàn)證對(duì)象內(nèi)部的屬性。

三、常用校驗(yàn)注解

注解校驗(yàn)作用
@NotBlank用在String 上面,一般用來(lái)校驗(yàn)String類型不能為空,而且調(diào)用trim()后,長(zhǎng)度必須大于0。
@NotEmpty用在集合上面,一般用來(lái)校驗(yàn)List類型(不能注釋枚舉),而且長(zhǎng)度必須大于0
@NotNull驗(yàn)證字段不為 null。一般用于數(shù)字類型。
@Min(value)限制必須為一個(gè)不小于指定值的數(shù)字
@Max(value)限制必須為一個(gè)不大于指定值的數(shù)字
@past限制元素(日期類型)必須是一個(gè)過(guò)去的日期
@Future限制元素(日期類型)必須是一個(gè)將來(lái)的日期
@Email限制的元素值為是電子郵件地址
@Patern(value)限制必須符合指定的正則表達(dá)式

四、如何使用

1、普通參數(shù)校驗(yàn)

即直接檢驗(yàn)像String、Interger這些普通參數(shù)

注意,要在controller上加入@Validated注解才能生效

@RestController
@Validated
public class Test1Controller {

    @PostMapping("/test1")
    public String test1(@NotEmpty String username, @Max(5) Integer value){
        return "校驗(yàn)普通參數(shù)";
    }

在Apifox上測(cè)試,會(huì)顯示錯(cuò)誤信息

在這里插入圖片描述

2、對(duì)象參數(shù)校驗(yàn)

UserDTO.java

@Data
public class UserDTO {
    /**
     * 用戶名
     */
    @NotBlank
    private String username;

    /**
     * 密碼
     */
    @NotBlank
    private String pasword;

    /**
     * 郵箱
     */
    @Email
    private String email;
}

在參數(shù)的DTO上加入@Valid和@Validated效果是一樣的

@RestController
public class Test2Controller {
    @PostMapping("/test2")
    public String test2(@Valid @RequestBody UserDTO userDTO){
        return "對(duì)象參數(shù)驗(yàn)證";
    }
}

在Apifox上測(cè)試,會(huì)顯示錯(cuò)誤信息

在這里插入圖片描述

3、集合參數(shù)校驗(yàn)

注意,要在controller上加入@Validated注解才能生效

@RestController
@Validated
public class Test3Controller {
    @PostMapping("/test3")
    public String test3(@Valid @RequestBody List<UserDTO> userDTOList){
        return "集合參數(shù)校驗(yàn)";
    }
}

在Apifox上測(cè)試,會(huì)顯示具體第幾個(gè)變量的哪幾個(gè)參數(shù)有錯(cuò)誤

在這里插入圖片描述

4、嵌套校驗(yàn)

UserListDTO.java

@Data
public class UserListDTO {
    /**
     * List的name
     */
    @NotBlank
    private String listName;

    /**
     *  User列表
     */
    @Valid
    private List<UserDTO> userDTOList;
}
@RestController
public class Test4Controller {
    @PostMapping("/test4")
    public String test4(@Validated @RequestBody UserListDTO userListDTO){
        return "嵌套參數(shù)校驗(yàn)";
    }
}

在Apifox上測(cè)試,會(huì)顯示具體第幾個(gè)變量的哪幾個(gè)參數(shù)有錯(cuò)誤

在這里插入圖片描述

以上就是SpringBoot中利用@Valid和@Validated進(jìn)行參數(shù)校驗(yàn)的詳細(xì)內(nèi)容,更多關(guān)于SpringBoot @Valid和@Validated參數(shù)校驗(yàn)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Java中NoClassDefFoundError異常的原因及解決方法

    Java中NoClassDefFoundError異常的原因及解決方法

    在 Java 開(kāi)發(fā)中,java.lang.NoClassDefFoundError 是運(yùn)行時(shí)異常中最常見(jiàn)的問(wèn)題之一,它通常出現(xiàn)在程序編譯成功后,卻在運(yùn)行時(shí)因 JVM 無(wú)法找到某個(gè)類的定義 而拋出,本文給大家介紹了Java中NoClassDefFoundError異常的原因及解決方法,需要的朋友可以參考下
    2025-05-05
  • Java中的CAS(Compare-And-Swap)操作示例詳解

    Java中的CAS(Compare-And-Swap)操作示例詳解

    CAS是一種原子操作,用于在多線程環(huán)境中實(shí)現(xiàn)無(wú)鎖(lock-free)的線程安全編程,下面通過(guò)本文給大家介紹Java中的CAS(Compare-And-Swap)操作示例詳解,感興趣的朋友一起看看吧
    2025-06-06
  • SpringBatch簡(jiǎn)單入門案例

    SpringBatch簡(jiǎn)單入門案例

    文章介紹了SpringBatch批處理框架的使用,包括其基本概念、優(yōu)勢(shì)、架構(gòu)以及入門案例,通過(guò)簡(jiǎn)單的任務(wù)和數(shù)據(jù)庫(kù)連接配置,展示了如何使用SpringBatch進(jìn)行基本的批處理操作,感興趣的朋友跟隨小編一起看看吧
    2025-12-12
  • Java內(nèi)部類的實(shí)現(xiàn)原理與可能的內(nèi)存泄漏說(shuō)明

    Java內(nèi)部類的實(shí)現(xiàn)原理與可能的內(nèi)存泄漏說(shuō)明

    這篇文章主要介紹了Java內(nèi)部類的實(shí)現(xiàn)原理與可能的內(nèi)存泄漏說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-10-10
  • JAVA對(duì)象分析之偏向鎖、輕量級(jí)鎖、重量級(jí)鎖升級(jí)過(guò)程

    JAVA對(duì)象分析之偏向鎖、輕量級(jí)鎖、重量級(jí)鎖升級(jí)過(guò)程

    這篇文章主要介紹了JAVA對(duì)象分析之偏向鎖、輕量級(jí)鎖、重量級(jí)鎖升級(jí)過(guò)程,又對(duì)這方面感興趣的同學(xué)可以跟著一起研究下
    2021-02-02
  • Java中的Future獲取任務(wù)返回值詳解

    Java中的Future獲取任務(wù)返回值詳解

    這篇文章主要介紹了Java中的Future獲取任務(wù)返回值詳解,在向線程池ThreadPoolExecutor提交任務(wù)時(shí),一般為了方便操作采用execute提交任務(wù),這時(shí)線程其實(shí)是無(wú)返回值的,需要的朋友可以參考下
    2023-12-12
  • Spring-AOP @AspectJ切點(diǎn)函數(shù)之@annotation()用法

    Spring-AOP @AspectJ切點(diǎn)函數(shù)之@annotation()用法

    這篇文章主要介紹了Spring-AOP @AspectJ切點(diǎn)函數(shù)之@annotation()用法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • Java監(jiān)聽(tīng)POST請(qǐng)求的示例詳解

    Java監(jiān)聽(tīng)POST請(qǐng)求的示例詳解

    要監(jiān)聽(tīng)POST請(qǐng)求,我們可以使用Java中的HttpServlet類,以下是一個(gè)使用Servlet API監(jiān)聽(tīng)POST請(qǐng)求的完整示例,通過(guò)代碼示例講解的非常詳細(xì),具有一定的參考價(jià)值,需要的朋友可以參考下
    2024-12-12
  • java不同線程解讀以及線程池的使用方式

    java不同線程解讀以及線程池的使用方式

    這篇文章主要介紹了java不同線程解讀以及線程池的使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • Nebula?Graph介紹和SpringBoot環(huán)境連接和查詢操作

    Nebula?Graph介紹和SpringBoot環(huán)境連接和查詢操作

    Nebula?Graph?是一款開(kāi)源的、分布式的、易擴(kuò)展的原生圖數(shù)據(jù)庫(kù),能夠承載包含數(shù)千億個(gè)點(diǎn)和數(shù)萬(wàn)億條邊的超大規(guī)模數(shù)據(jù)集,并且提供毫秒級(jí)查詢,這篇文章主要介紹了Nebula?Graph介紹和SpringBoot環(huán)境連接和查詢,需要的朋友可以參考下
    2022-10-10

最新評(píng)論

罗源县| 云浮市| 伊宁县| 长海县| 高淳县| 巴林右旗| 固始县| 怀宁县| 安化县| 交口县| 巩留县| 垫江县| 鹤山市| 岱山县| 正安县| 仙桃市| 清涧县| 四子王旗| 新泰市| 河北省| 府谷县| 台北市| 乐亭县| 威海市| 滦平县| 屏东县| 汉源县| 会同县| 赞皇县| 南阳市| 泗阳县| 和政县| 西青区| 桓台县| 丽江市| 正镶白旗| 伊川县| 洞口县| 永新县| 鄯善县| 蓬溪县|