SpringBoot中利用@Valid和@Validated進行參數(shù)校驗
一、什么是參數(shù)校驗
例如在某個登錄請求中傳遞參數(shù)包含用戶信息,需要判斷用戶信息是否為空,以及判斷郵箱是否為空等情況,正常處理會寫大量的If else 語句非常影響美觀,可讀性也非常低,因此提出了參數(shù)校驗這個概念,也就是下文介紹的@Valid和@Validated注解
@Controller @RequestMapping("/user") public class UserControlelr { @PostMapping("/login") public String login(UserDTO userDTO){ if (userDTO.getUsername() == null || userDTO.getUsername().isEmpty()){ // 進行某種操作 } if(userDTO.getEmail() == null || userDTO.getEmail().isEmpty()){ // 進行某種操作 } return "loginSuccess"; } }
二、@Valid和@Validated注解的異同
標(biāo)注位置
- @Validated : 用在類、方法和方法參數(shù)上,但不能用于成員屬性。
- @Valid:可以用在方法、構(gòu)造函數(shù)、方法參數(shù)和成員屬性上。
分組校驗
- @Validated :支持分組驗證,可以更細致地控制驗證過程。
- @Valid:主要支持標(biāo)準(zhǔn)的Bean驗證功能,不支持分組驗證。
嵌套校驗
- @Validated :不支持嵌套驗證。
- @Valid:支持嵌套驗證,可以嵌套驗證對象內(nèi)部的屬性。
三、常用校驗注解
注解 | 校驗作用 |
---|---|
@NotBlank | 用在String 上面,一般用來校驗String類型不能為空,而且調(diào)用trim()后,長度必須大于0。 |
@NotEmpty | 用在集合上面,一般用來校驗List類型(不能注釋枚舉),而且長度必須大于0 |
@NotNull | 驗證字段不為 null。一般用于數(shù)字類型。 |
@Min(value) | 限制必須為一個不小于指定值的數(shù)字 |
@Max(value) | 限制必須為一個不大于指定值的數(shù)字 |
@past | 限制元素(日期類型)必須是一個過去的日期 |
@Future | 限制元素(日期類型)必須是一個將來的日期 |
限制的元素值為是電子郵件地址 | |
@Patern(value) | 限制必須符合指定的正則表達式 |
四、如何使用
1、普通參數(shù)校驗
即直接檢驗像String、Interger這些普通參數(shù)
注意,要在controller上加入@Validated注解才能生效
@RestController @Validated public class Test1Controller { @PostMapping("/test1") public String test1(@NotEmpty String username, @Max(5) Integer value){ return "校驗普通參數(shù)"; }
在Apifox上測試,會顯示錯誤信息
2、對象參數(shù)校驗
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 "對象參數(shù)驗證"; } }
在Apifox上測試,會顯示錯誤信息
3、集合參數(shù)校驗
注意,要在controller上加入@Validated注解才能生效
@RestController @Validated public class Test3Controller { @PostMapping("/test3") public String test3(@Valid @RequestBody List<UserDTO> userDTOList){ return "集合參數(shù)校驗"; } }
在Apifox上測試,會顯示具體第幾個變量的哪幾個參數(shù)有錯誤
4、嵌套校驗
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ù)校驗"; } }
在Apifox上測試,會顯示具體第幾個變量的哪幾個參數(shù)有錯誤
以上就是SpringBoot中利用@Valid和@Validated進行參數(shù)校驗的詳細內(nèi)容,更多關(guān)于SpringBoot @Valid和@Validated參數(shù)校驗的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
sprintboot使用spring-security包,緩存內(nèi)存與redis共存方式
這篇文章主要介紹了sprintboot使用spring-security包,緩存內(nèi)存與redis共存方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-10-10SpringBoot使用AOP實現(xiàn)統(tǒng)計全局接口訪問次數(shù)詳解
這篇文章主要介紹了SpringBoot通過AOP實現(xiàn)對全局接口訪問次數(shù)的統(tǒng)計,文章從相關(guān)問題展開全文內(nèi)容詳情,具有一定的參考價值,需要的小伙伴可以參考一下2022-06-06詳解spring boot jpa整合QueryDSL來簡化復(fù)雜操作
這篇文章主要介紹了詳解spring boot jpa整合QueryDSL來簡化復(fù)雜操作,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-04-04