真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

SpringBoot中怎么處理校驗(yàn)參數(shù)

這期內(nèi)容當(dāng)中小編將會給大家?guī)碛嘘P(guān)SpringBoot中怎么處理校驗(yàn)參數(shù),文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

為石門等地區(qū)用戶提供了全套網(wǎng)頁設(shè)計(jì)制作服務(wù),及石門網(wǎng)站建設(shè)行業(yè)解決方案。主營業(yè)務(wù)為網(wǎng)站設(shè)計(jì)、做網(wǎng)站、石門網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會得到認(rèn)可,從而選擇與我們長期合作。這樣,我們也可以走得更遠(yuǎn)!

什么是Validator

Bean Validation是Java定義的一套基于注解的數(shù)據(jù)校驗(yàn)規(guī)范,目前已經(jīng)從JSR 303的1.0版本升級到JSR 349的1.1版本,再到JSR 380的2.0版本(2.0完成于2017.08),已經(jīng)經(jīng)歷了三個版本 。在SpringBoot中已經(jīng)集成在 starter-web中,所以無需在添加其他依賴。

注解介紹

validator內(nèi)置注解

注解

詳細(xì)信息

@Null

被注釋的元素必須為 null

@NotNull

被注釋的元素必須不為 null

@AssertTrue

被注釋的元素必須為 true

@AssertFalse

被注釋的元素必須為 false

@Min(value)

被注釋的元素必須是一個數(shù)字,其值必須大于等于指定的最小值

@Max(value)

被注釋的元素必須是一個數(shù)字,其值必須小于等于指定的最大值

@DecimalMin(value)

被注釋的元素必須是一個數(shù)字,其值必須大于等于指定的最小值

@DecimalMax(value)

被注釋的元素必須是一個數(shù)字,其值必須小于等于指定的最大值

@Size(max, min)

被注釋的元素的大小必須在指定的范圍內(nèi)

@Digits (integer, fraction)

被注釋的元素必須是一個數(shù)字,其值必須在可接受的范圍內(nèi)

@Past

被注釋的元素必須是一個過去的日期

@Future

被注釋的元素必須是一個將來的日期

@Pattern(value)

被注釋的元素必須符合指定的正則表達(dá)式

Hibernate Validator 附加的 constraint

注解

詳細(xì)信息

@Email

被注釋的元素必須是電子郵箱地址

@Length

被注釋的字符串的大小必須在指定的范圍內(nèi)

@NotEmpty

被注釋的字符串的必須非空

@Range

被注釋的元素必須在合適的范圍內(nèi)

@NotBlank

驗(yàn)證字符串非null,且長度必須大于0

注意:

@NotNull 適用于任何類型被注解的元素必須不能與NULL  @NotEmpty 適用于String Map或者數(shù)組不能為Null且長度必須大于0  @NotBlank 只能用于String上面 不能為null,調(diào)用trim()后,長度必須大于0

使用

使用起來也非常簡單,下面略過創(chuàng)建項(xiàng)目

模擬用戶注冊封裝了一個UserDTO

當(dāng)提交數(shù)據(jù)的時(shí)候如果使用以前的做法就是IF ELSE判斷參數(shù)使用validator則是需要增加注解即可。

例如非空校驗(yàn):

然后需要在controller方法體添加@Validated不加@Validated校驗(yàn)會不起作用

然后請求一下請求接口,把Email參數(shù)設(shè)置為空

參數(shù):

{  "userName":"luomengsun",  "mobileNo":"11111111111",  "sex":1,  "age":21,  "email":""}

返回結(jié)果:

后臺拋出異常

這樣是能校驗(yàn)成功,但是有個問題就是返回參數(shù)并不理想,前端也并不容易處理返回參數(shù),所以我們添加一下全局異常處理,然后添加一下全局統(tǒng)一返回參數(shù)這樣比較規(guī)范。

添加全局異常

創(chuàng)建一個GlobalExceptionHandler類,在類上方添加@RestControllerAdvice注解然后添加以下代碼:

/**   * 方法參數(shù)校驗(yàn)   */@ExceptionHandler(MethodArgumentNotValidException.class)public ReturnVO handleMethodArgumentNotValidException(MethodArgumentNotValidException e) {    log.error(e.getMessage(), e);    return new ReturnVO().error(e.getBindingResult().getFieldError().getDefaultMessage());  }

此方法主要捕捉MethodArgumentNotValidException異常然后對異常結(jié)果進(jìn)行封裝,如果需要在自行添加其他異常處理。

添加完之后我們在看一下運(yùn)行結(jié)果,調(diào)用接口返回:

{  "code": "9999",  "desc": "郵箱不能為空",  "data": null}

OK 已經(jīng)對異常進(jìn)行處理。

校驗(yàn)格式

如果想要校驗(yàn)郵箱格式或者手機(jī)號的話也非常簡單。

校驗(yàn)郵箱

/**   * 郵箱   */  @NotBlank(message = "郵箱不能為空")  @NotNull(message = "郵箱不能為空")  @Email(message = "郵箱格式錯誤")  private String email;

使用正則校驗(yàn)手機(jī)號

校驗(yàn)手機(jī)號使用正則進(jìn)行校驗(yàn),然后限制了一下位數(shù)

/**   * 手機(jī)號   */  @NotNull(message = "手機(jī)號不能為空")  @NotBlank(message = "手機(jī)號不能為空")  @Pattern(regexp ="^[1][3,4,5,6,7,8,9][0-9]{9}$", message = "手機(jī)號格式有誤")  @Max(value = 11,message = "手機(jī)號只能為{max}位")  @Min(value = 11,message = "手機(jī)號只能為{min}位")  private String mobileNo;

查看一下運(yùn)行結(jié)果

傳入?yún)?shù):

{  "userName":"luomengsun",  "mobileNo":"111111a",  "sex":1,  "age":21,  "email":"1212121"}

返回結(jié)果:

{  "code": "9999",  "desc": "郵箱格式錯誤",  "data": null}

這里不再驗(yàn)證手機(jī)號的例子

自定義注解

上面的注解只有這么多,如果有特殊校驗(yàn)的參數(shù)我們可以使用Validator自定義注解進(jìn)行校驗(yàn)

首先創(chuàng)建一個IdCard注解類

@Documented@Target({ElementType.PARAMETER, ElementType.FIELD})@Retention(RetentionPolicy.RUNTIME)@Constraint(validatedBy = IdCardValidator.class)public @interface IdCard {  String message() default "身份證號碼不合法";  Class[] groups() default {};  Class[] payload() default {};}

在UserDTO中添加@IdCard注解即可驗(yàn)證,在運(yùn)行時(shí)觸發(fā),本文不對自定義注解做過多的解釋,下篇文章介紹自定義注解

message 提示信息  groups 分組  payload 針對于Bean

然后添加IdCardValidator 主要進(jìn)行驗(yàn)證邏輯

上面調(diào)用了is18ByteIdCardComplex方法,傳入?yún)?shù)就是手機(jī)號,驗(yàn)證身份證規(guī)則自行百度

然后使用

@NotNull(message = "身份證號不能為空")  @IdCard(message = "身份證不合法")  private String IdCardNumber;

分組

就比如上面我們定義的UserDTO中的參數(shù)如果要服用的話怎么辦?

在重新定義一個類然后里面的參數(shù)要重新添加注解?

Validator提供了分組方法完美了解決DTO服用問題

現(xiàn)在我們注冊的接口修改一下規(guī)則,只有用戶名不能為空其他參數(shù)都不進(jìn)行校驗(yàn)

先創(chuàng)建分組的接口

public interface Create extends Default {}

我們只需要在注解加入分組參數(shù)即可例如:

/**   * 用戶名   */  @NotBlank(message = "用戶姓名不能為空",groups = Create.class)  @NotNull(message = "用戶姓名不能為空",groups = Create.class)  private String userName;  @NotBlank(message = "郵箱不能為空",groups = Update.class)  @NotNull(message = "郵箱不能為空",groups = Update.class)  @Email(message = "郵箱格式錯誤",groups = Update.class)  private String email;

然后在修改Controller在@Validated中傳入Create.class

@PostMapping("/user")  public ReturnVO userRegistra(@RequestBody @Validated(Create.class) UserDTO userDTO){    ReturnVO returnVO = userService.userRegistra(userDTO);    return returnVO ;  }

然后調(diào)用傳入?yún)?shù):

{  "userName":"",}

返回參數(shù):

{  "code": "9999",  "desc": "用戶姓名不能為空",  "data": null}

OK 現(xiàn)在只對Create的進(jìn)行校驗(yàn),而Updata組的不校驗(yàn),如果需要復(fù)用DTO的話可以使用分組校驗(yàn)

校驗(yàn)單個參數(shù)

在開發(fā)的時(shí)候一定遇到過單個參數(shù)的情況,在參數(shù)前面加上注解即可

@PostMapping("/get")  public ReturnVO getUserInfo(@RequestParam("userId") @NotNull(message = "用戶ID不能為空") String userId){    return new ReturnVO().success();  }

然后在Controller類上面增加@Validated注解,注意不是增加在參數(shù)前面。

上述就是小編為大家分享的SpringBoot中怎么處理校驗(yàn)參數(shù)了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。


網(wǎng)站名稱:SpringBoot中怎么處理校驗(yàn)參數(shù)
文章鏈接:http://weahome.cn/article/pgocio.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部