欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

例如在某個(gè)登錄請求中傳遞參數(shù)包含用戶信息,需要判斷用戶信息是否為空,以及判斷郵箱是否為空等情況,正常處理會(huì)寫大量的If else 語句非常影響美觀,可讀性也非常低,因此提出了參數(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)證過程。
  • @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 上面,一般用來校驗(yàn)String類型不能為空,而且調(diào)用trim()后,長度必須大于0。
@NotEmpty用在集合上面,一般用來校驗(yàn)List類型(不能注釋枚舉),而且長度必須大于0
@NotNull驗(yàn)證字段不為 null。一般用于數(shù)字類型。
@Min(value)限制必須為一個(gè)不小于指定值的數(shù)字
@Max(value)限制必須為一個(gè)不大于指定值的數(shù)字
@past限制元素(日期類型)必須是一個(gè)過去的日期
@Future限制元素(日期類型)必須是一個(gè)將來的日期
@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上測試,會(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上測試,會(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上測試,會(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上測試,會(huì)顯示具體第幾個(gè)變量的哪幾個(gè)參數(shù)有錯(cuò)誤

在這里插入圖片描述

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

相關(guān)文章

  • sprintboot使用spring-security包,緩存內(nèi)存與redis共存方式

    sprintboot使用spring-security包,緩存內(nèi)存與redis共存方式

    這篇文章主要介紹了sprintboot使用spring-security包,緩存內(nèi)存與redis共存方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • SpringBoot使用AOP實(shí)現(xiàn)統(tǒng)計(jì)全局接口訪問次數(shù)詳解

    SpringBoot使用AOP實(shí)現(xiàn)統(tǒng)計(jì)全局接口訪問次數(shù)詳解

    這篇文章主要介紹了SpringBoot通過AOP實(shí)現(xiàn)對(duì)全局接口訪問次數(shù)的統(tǒng)計(jì),文章從相關(guān)問題展開全文內(nèi)容詳情,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-06-06
  • JAVA使用動(dòng)態(tài)代理對(duì)象進(jìn)行敏感字過濾代碼實(shí)例

    JAVA使用動(dòng)態(tài)代理對(duì)象進(jìn)行敏感字過濾代碼實(shí)例

    這篇文章主要介紹了JAVA使用動(dòng)態(tài)代理對(duì)象進(jìn)行敏感字過濾代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-09-09
  • 關(guān)于spring中定時(shí)器的使用教程

    關(guān)于spring中定時(shí)器的使用教程

    大家應(yīng)該都有所體會(huì),在很多實(shí)際的web應(yīng)用中,都有需要定時(shí)實(shí)現(xiàn)的服務(wù),下面這篇文章主要給大家介紹了關(guān)于spring中定時(shí)器的使用教程,對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起看看吧。
    2017-06-06
  • 詳解IDEA下Gradle多模塊(項(xiàng)目)的構(gòu)建

    詳解IDEA下Gradle多模塊(項(xiàng)目)的構(gòu)建

    這篇文章主要介紹了詳解IDEA下Gradle多模塊(項(xiàng)目)的構(gòu)建,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2019-01-01
  • maven多模塊pom配置實(shí)例詳解

    maven多模塊pom配置實(shí)例詳解

    這篇文章主要介紹了maven多模塊pom配置實(shí)例代碼,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2024-01-01
  • 詳解spring boot jpa整合QueryDSL來簡化復(fù)雜操作

    詳解spring boot jpa整合QueryDSL來簡化復(fù)雜操作

    這篇文章主要介紹了詳解spring boot jpa整合QueryDSL來簡化復(fù)雜操作,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-04-04
  • 對(duì)ThreadLocal內(nèi)存泄漏及弱引用的理解

    對(duì)ThreadLocal內(nèi)存泄漏及弱引用的理解

    這篇文章主要介紹了對(duì)ThreadLocal內(nèi)存泄漏及弱引用的理解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • 通過實(shí)例解析POJO和JavaBean的區(qū)別

    通過實(shí)例解析POJO和JavaBean的區(qū)別

    這篇文章主要介紹了通過實(shí)例解析POJO和JavaBean的區(qū)別,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-07-07
  • @Scheduled 如何讀取動(dòng)態(tài)配置文件

    @Scheduled 如何讀取動(dòng)態(tài)配置文件

    這篇文章主要介紹了@Scheduled 如何讀取動(dòng)態(tài)配置文件的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-06-06

最新評(píng)論