最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Springboot參數(shù)校驗(yàn)之分組校驗(yàn)、嵌套校驗(yàn)的實(shí)現(xiàn)

 更新時(shí)間:2023年08月22日 09:48:40   作者:臨時(shí)工  
日常開(kāi)發(fā)中,免不了需要對(duì)請(qǐng)求參數(shù)進(jìn)行校驗(yàn),諸如判空,長(zhǎng)度,正則,集合等,復(fù)雜一點(diǎn)的請(qǐng)求參數(shù)可能會(huì)包含嵌套,分組校驗(yàn),本文就詳細(xì)的介紹一下,感興趣的可以了解一下

日常開(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)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論

遵化市| 山阳县| 达孜县| 兴义市| 永宁县| 海原县| 敦化市| 定南县| 民勤县| 壶关县| 新巴尔虎左旗| 涞源县| 双鸭山市| 莱阳市| 高青县| 前郭尔| 栾城县| 行唐县| 讷河市| 饶阳县| 抚顺县| 平陆县| 军事| 屯门区| 启东市| 潢川县| 富蕴县| 大埔县| 昔阳县| 平江县| 清河县| 宣化县| 龙山县| 乌什县| 揭西县| 新平| 射洪县| 大庆市| 信宜市| 同仁县| 广安市|