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