Springboot參數(shù)校驗(yàn)之分組校驗(yàn)、嵌套校驗(yàn)的實(shí)現(xiàn)
日常開(kāi)發(fā)中,免不了需要對(duì)請(qǐng)求參數(shù)進(jìn)行校驗(yàn),諸如判空,長(zhǎng)度,正則,集合等,復(fù)雜一點(diǎn)的請(qǐng)求參數(shù)可能會(huì)包含嵌套,分組校驗(yàn)。
我們由簡(jiǎn)入深開(kāi)始,一文搞定參數(shù)校驗(yàn)!
1. 簡(jiǎn)單判空
- GET請(qǐng)求,字符串類型參數(shù):使用@NotBlank注解 @NotBlank String mobile
- GET請(qǐng)求,int,long byte等類型參數(shù):使用@NotNull注解 @NotNull Integer userNum
- POST請(qǐng)求,以body中參數(shù)為json為例:使用@Valid注解 @Valid UserReq userReq,UserReq中字段使用@NotBlank 或@NotNull
以下均為POST請(qǐng)求,以body中參數(shù)類型為json舉例
2. 參數(shù)長(zhǎng)度校驗(yàn)
@Size(min=5,max = 20) private String nickName;
長(zhǎng)度5-20之間
3. 正則校驗(yàn)
@Pattern(regexp = "^\\d{15}|\\d{18}$") private String idCard;
15或18位數(shù)字
4. 集合校驗(yàn)
@NotEmpty private List<User> users;
集合不能為空
5.分組校驗(yàn)
分組校驗(yàn)需要先定義好分組,比如
舉例,定義一個(gè)AddView類
public interface AddView { }
針對(duì)上面的users集合使用分組
public class UserReq { ? ? private static final long serialVersionUID = 1L; ? ? /** ? ? ?* id ? ? ?*/ ? ? @NotNull ? ? private Long id; ? ? /** ? ? ?* 用戶集合 ? ? ?*/ ? ? @NotEmpty(groups = {AddView.class, UpdateView.class}) ? ? private List<User> users; }
通過(guò)配置groups使users在新增和修改的時(shí)候才會(huì)校驗(yàn)。
在請(qǐng)求方法上設(shè)置 @Validated,在修改users時(shí),校驗(yàn)參數(shù)不能為空集合
@PostMapping("users") public Response<Void> users(@RequestBody @Validated({UpdateView.class}) UserReq userReq) { // to do something return RespUtil.success(); }
6. 嵌套校驗(yàn)
同樣的我們用users舉例;如果我們想要對(duì)users中某個(gè)字段也進(jìn)行校驗(yàn),那么怎么實(shí)現(xiàn)呢?
也很簡(jiǎn)單,只需要再加一個(gè)@Valid
public class UserReq { ? ? private static final long serialVersionUID = 1L; ? ? /** ? ? ?* id ? ? ?*/ ? ? @NotNull ? ? private Long id; ? ? /** ? ? ?* 用戶集合 ? ? ?*/ ? ? @NotEmpty(groups = {AddView.class, UpdateView.class}) ? ? @Valid ? ? private List<User> users; }
User內(nèi)字段設(shè)置
public class User { ? ? private static final long serialVersionUID = 1L; ? ? /** ? ? ?* id ? ? ?*/ ? ? @NotNull ? ? private Long userId; ? ? /** ? ? ?* 姓名 ? ? ?*/ ? ? @NotBlank ? ? private String name; }
這樣就實(shí)現(xiàn)了參數(shù)的嵌套校驗(yàn)+分組校驗(yàn)的組合。
當(dāng)然,在包javax.validation.constraints下還有很多其他注解來(lái)選擇支持不同場(chǎng)景的需要,比如@DecimalMax @DecimalMin @Email @Max @Min Negative等,這里僅列舉常用的幾個(gè)起到拋磚引玉的作用。
7. 請(qǐng)求header參數(shù)校驗(yàn)
有時(shí)候我們不單單需要校驗(yàn)body中參數(shù),還有可能需要校驗(yàn)header中參數(shù),比如常見(jiàn)的token啊、timestamp啊等等。
那就可以利用spring提供的@RequestHeader來(lái)實(shí)現(xiàn),用法也很簡(jiǎn)單
@PostMapping("login") public Response<Void> login(@RequestBody @Valid LoginReq loginReq, @NotBlank @RequestHeader("token") String token) { // to do something return RespUtil.success();
這里我們就實(shí)現(xiàn)了對(duì)header參數(shù)token的判空處理。
后記:參數(shù)校驗(yàn)場(chǎng)景各種各樣,對(duì)于這些簡(jiǎn)單的使用,掌握好了還是能夠覆蓋大部分需求的;常用的必須掌握,不常用的我們需要知道,萬(wàn)一哪天遇到了,我們就知道在哪里去查現(xiàn)成的輪子可以使用;當(dāng)然,對(duì)于復(fù)雜的參數(shù)校驗(yàn),有可能需要您自定義注解實(shí)現(xiàn),或者通過(guò)過(guò)濾器等方式實(shí)現(xiàn)。不必拘泥于固定形式。一切以結(jié)果為導(dǎo)向。
到此這篇關(guān)于Springboot參數(shù)校驗(yàn)之分組校驗(yàn)、嵌套校驗(yàn)的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Springboot 參數(shù)校驗(yàn)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- SpringBoot進(jìn)行參數(shù)校驗(yàn)的方法詳解
- 詳解SpringBoot中的參數(shù)校驗(yàn)(項(xiàng)目實(shí)戰(zhàn))
- SpringBoot參數(shù)校驗(yàn)之@Valid的使用詳解
- SpringBoot參數(shù)校驗(yàn)與國(guó)際化使用教程
- SpringBoot參數(shù)校驗(yàn)Validator框架詳解
- SpringBoot 如何自定義請(qǐng)求參數(shù)校驗(yàn)
- SpringBoot使用validation做參數(shù)校驗(yàn)的實(shí)現(xiàn)步驟
- SpringBoot中的異常處理與參數(shù)校驗(yàn)的方法實(shí)現(xiàn)
相關(guān)文章
SpringBoot整合FastDFS方法過(guò)程詳解
這篇文章主要介紹了SpringBoot整合FastDFS方法過(guò)程詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-05-05SpringBoot項(xiàng)目中Druid自動(dòng)登錄功能實(shí)現(xiàn)
Druid是Java語(yǔ)言中最好的數(shù)據(jù)庫(kù)連接池,Druid能夠提供強(qiáng)大的監(jiān)控和擴(kuò)展功能,這篇文章主要介紹了SpringBoot項(xiàng)目中Druid自動(dòng)登錄功能實(shí)現(xiàn),需要的朋友可以參考下2024-08-08Mybatis Generator Plugin悲觀鎖實(shí)現(xiàn)示例
本文將從悲觀鎖為例,讓你快速了解如何實(shí)現(xiàn)Mybatis Generator Plugin。文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-09-09Java實(shí)現(xiàn)簡(jiǎn)單的遞歸操作方法實(shí)例
這篇文章主要給大家介紹了關(guān)于Java實(shí)現(xiàn)簡(jiǎn)單的遞歸操作的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-02-02