日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 前端技术 > javascript >内容正文

javascript

java护照号码校验_SpringBoot如何优雅的校验参数

發(fā)布時(shí)間:2023/12/20 javascript 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java护照号码校验_SpringBoot如何优雅的校验参数 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

博客地址 :https://lqcoder.com

前言

做web開發(fā)有一點(diǎn)很煩人就是要校驗(yàn)參數(shù),基本上每個(gè)接口都要對(duì)參數(shù)進(jìn)行校驗(yàn),比如一些格式校驗(yàn) 非空校驗(yàn)都是必不可少的。如果參數(shù)比較少的話還是容易 處理的一但參數(shù)比較多了的話代碼中就會(huì)出現(xiàn)大量的IF ELSE就比如下面這樣:

這個(gè)例子只是校驗(yàn)了一下空參數(shù)。如果需要驗(yàn)證郵箱格式和手機(jī)號(hào)格式校驗(yàn)的話代碼會(huì)更多,所以介紹一下validator通過(guò)注解的方式進(jìn)行校驗(yàn)參數(shù)。

什么是Validator

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

注解介紹

validator內(nèi)置注解

注解詳細(xì)信息@Null被注釋的元素必須為 null@NotNull被注釋的元素必須不為 null@AssertTrue被注釋的元素必須為 true@AssertFalse被注釋的元素必須為 false@Min(value)被注釋的元素必須是一個(gè)數(shù)字,其值必須大于等于指定的最小值@Max(value)被注釋的元素必須是一個(gè)數(shù)字,其值必須小于等于指定的最大值@DecimalMin(value)被注釋的元素必須是一個(gè)數(shù)字,其值必須大于等于指定的最小值@DecimalMax(value)被注釋的元素必須是一個(gè)數(shù)字,其值必須小于等于指定的最大值@Size(max, min)被注釋的元素的大小必須在指定的范圍內(nèi)@Digits (integer, fraction)被注釋的元素必須是一個(gè)數(shù)字,其值必須在可接受的范圍內(nèi)@Past被注釋的元素必須是一個(gè)過(guò)去的日期@Future被注釋的元素必須是一個(gè)將來(lái)的日期@Pattern(value)被注釋的元素必須符合指定的正則表達(dá)式

Hibernate Validator 附加的 constraint

注解詳細(xì)信息@Email被注釋的元素必須是電子郵箱地址@Length被注釋的字符串的大小必須在指定的范圍內(nèi)@NotEmpty被注釋的字符串的必須非空@Range被注釋的元素必須在合適的范圍內(nèi)@NotBlank驗(yàn)證字符串非null,且長(zhǎng)度必須大于0

注意

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

使用

使用起來(lái)也非常簡(jiǎn)單,下面略過(guò)創(chuàng)建項(xiàng)目

GITHUB地址:

模擬用戶注冊(cè)封裝了一個(gè)UserDTO

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

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

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

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

參數(shù):

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

返回結(jié)果:

后臺(tái)拋出異常

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

添加全局異常

創(chuàng)建一個(gè)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異常然后對(duì)異常結(jié)果進(jìn)行封裝,如果需要在自行添加其他異常處理。

添加完之后我們?cè)诳匆幌逻\(yùn)行結(jié)果,調(diào)用接口返回:

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

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

校驗(yàn)格式

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

校驗(yàn)郵箱

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

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

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

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

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

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

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

返回結(jié)果:

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

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

自定義注解

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

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

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

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

  • message 提示信息
  • groups 分組
  • payload 針對(duì)于Bean

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

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

然后使用

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

分組

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

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

Validator提供了分組方法完美了解決DTO服用問(wèn)題

現(xiàn)在我們注冊(cè)的接口修改一下規(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 = "郵箱格式錯(cuò)誤",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)在只對(duì)Create的進(jìn)行校驗(yàn),而Updata組的不校驗(yàn),如果需要復(fù)用DTO的話可以使用分組校驗(yàn)

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

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

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

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

點(diǎn)擊下方鏈接 更好的閱讀體驗(yàn)

總結(jié)

以上是生活随笔為你收集整理的java护照号码校验_SpringBoot如何优雅的校验参数的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。