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)求,字符串類(lèi)型參數(shù):使用@NotBlank注解 @NotBlank String mobile
- GET請(qǐng)求,int,long byte等類(lèi)型參數(shù):使用@NotNull注解 @NotNull Integer userNum
- POST請(qǐng)求,以body中參數(shù)為json為例:使用@Valid注解 @Valid UserReq userReq,UserReq中字段使用@NotBlank 或@NotNull
以下均為POST請(qǐng)求,以body中參數(shù)類(lèi)型為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類(lèi)
public interface AddView {
}針對(duì)上面的users集合使用分組
public class UserReq {
? ? private static final long serialVersionUID = 1L;
? ? /**
? ? ?* id
? ? ?*/
? ? @NotNull
? ? private Long id;
? ? /**
? ? ?* 用戶(hù)集合
? ? ?*/
? ? @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;
? ? /**
? ? ?* 用戶(hù)集合
? ? ?*/
? ? @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)文章
基于java實(shí)現(xiàn)簡(jiǎn)單發(fā)紅包功能
這篇文章主要為大家詳細(xì)介紹了基于java實(shí)現(xiàn)簡(jiǎn)單發(fā)紅包功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-11-11
利用spring?boot+WebSocket實(shí)現(xiàn)后臺(tái)主動(dòng)消息推送功能
目前對(duì)于服務(wù)端向客戶(hù)端推送數(shù)據(jù),常用技術(shù)方案有輪詢(xún)、websocket等,下面這篇文章主要給大家介紹了關(guān)于利用spring?boot+WebSocket實(shí)現(xiàn)后臺(tái)主動(dòng)消息推送功能的相關(guān)資料,需要的朋友可以參考下2022-04-04
java.lang.ExceptionInInitializerError異常的解決方法
這篇文章主要為大家詳細(xì)介紹了java.lang.ExceptionInInitializerError異常的解決方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-10-10
Spring 中使用Quartz實(shí)現(xiàn)任務(wù)調(diào)度
這篇文章主要介紹了Spring 中使用Quartz實(shí)現(xiàn)任務(wù)調(diào)度,Spring中使用Quartz 有兩種方式,感興趣的小伙伴們可以參考一下。2017-02-02
在 Spring Boot 中實(shí)現(xiàn)異常處理最佳實(shí)踐
本文介紹如何在Spring Boot中實(shí)現(xiàn)異常處理,涵蓋核心概念、實(shí)現(xiàn)方法、與先前查詢(xún)的集成、性能分析、常見(jiàn)問(wèn)題和最佳實(shí)踐,感興趣的朋友一起看看吧2025-04-04
SpringBoot整合mybatis-generator-maven-plugin的方法
這篇文章主要介紹了SpringBoot整合mybatis-generator-maven-plugin,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-11-11
SpringBoot開(kāi)發(fā)案例之配置Druid數(shù)據(jù)庫(kù)連接池的示例
本篇文章主要介紹了SpringBoot開(kāi)發(fā)案例之配置Druid數(shù)據(jù)庫(kù)連接池的示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-03-03

