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

歡迎訪問 生活随笔!

生活随笔

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

javascript

SpringBoot 轻松搞定数据验证 (二)

發(fā)布時(shí)間:2024/3/13 javascript 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SpringBoot 轻松搞定数据验证 (二) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

感謝作者:?http://www.spring4all.com/article/1225

當(dāng)系統(tǒng)自帶的注解無法滿足我們的要求時(shí)候應(yīng)該咋辦呢?這就是本章將給各位介紹的自定義 Validator 注解


為何要自定義

javax.validation?包與?hibernate-validator?包中存在的注解幾乎可以滿足大部分的要求,又擁有基于正則表達(dá)式的@Pattern,為什么還需要自己去定義呢?

  • 正則效率不高
  • 正則可讀性不好
  • 正則門檻較高,很多開發(fā)者并不會(huì)編寫正則表達(dá)式


本章目標(biāo)

熟悉?ConstraintValidator?接口并且編寫自己的數(shù)據(jù)驗(yàn)證注解


自定義注解

這里定義了一個(gè)?@DateTime?注解,在該注解上標(biāo)注了?@Constraint?注解,它的作用就是指定一個(gè)具體的校驗(yàn)器類

/*** @author Ray* @date 2018/7/4 0004* 自定義注解* FIELD 約束相關(guān)的屬性;PARAMETER 約束相關(guān)的參數(shù)*/ @Target({ElementType.FIELD, ElementType.PARAMETER}) // 約束注解應(yīng)用的目標(biāo)元素類型 @Retention(RetentionPolicy.RUNTIME) // 約束注解應(yīng)用的時(shí)機(jī) @Constraint(validatedBy = DateTimeValidator.class) // 與約束注解關(guān)聯(lián)的驗(yàn)證器 public @interface DateTime {/*** 約束注解驗(yàn)證時(shí)的輸出消息 - 關(guān)鍵字段*/String message() default "格式錯(cuò)誤";/*** 約束注解驗(yàn)證時(shí)的格式*/String format() default "yyyy-MM-dd";/*** 約束注解在驗(yàn)證時(shí)所屬的組別 - 關(guān)鍵字段*/Class<?>[] groups() default {};/*** 約束注解的有效負(fù)載 - 關(guān)鍵字段*/Class<? extends Payload>[] payload() default {}; }

具體驗(yàn)證

定義校驗(yàn)器類?DateTimeValidator?實(shí)現(xiàn)?ConstraintValidator?接口,實(shí)現(xiàn)接口后需要實(shí)現(xiàn)它里面的?initialize?與?isValid?方法。

/*** @author Ray* @date 2018/7/4 0004* 日期格式驗(yàn)證* 實(shí)現(xiàn) initialize 與 isValid 方法*/ public class DateTimeValidator implements ConstraintValidator<DateTime, String> {private DateTime dateTime;/*** 主要用于初始化,它可以獲得當(dāng)前注解的所有屬性*/@Overridepublic void initialize(DateTime dateTime) {this.dateTime = dateTime;}/*** 進(jìn)行約束驗(yàn)證的主體方法,* 其中 value 就是驗(yàn)證參數(shù)的具體實(shí)例,* context 代表約束執(zhí)行的上下文環(huán)境*/@Overridepublic boolean isValid(String value, ConstraintValidatorContext context) {// 如果 value 為空則不進(jìn)行格式驗(yàn)證,為空驗(yàn)證可以使用 @NotBlank @NotNull @NotEmpty 等注解來進(jìn)行控制,職責(zé)分離if(value == null){return true;}String format = dateTime.format();if(value.length() != format.length()){return false;}SimpleDateFormat simpleDateFormat = new SimpleDateFormat(format);try{simpleDateFormat.parse(value);}catch (ParseException e){return false;}return true;} }

控制層

/*** @author Ray* @date 2018/7/4 0004* 參數(shù)校驗(yàn)*/ @Validated @RestController public class ValidateController2 {@GetMapping("/test")public String test(@DateTime(message = "您輸入的格式錯(cuò)誤,正確的格式為:{format}", format = "yyyy-MM-dd") String date){return "success";} }


測試

完成準(zhǔn)備事項(xiàng)后,啟動(dòng)項(xiàng)目,自行測試即可,測試手段相信大伙都不陌生了,如?瀏覽器、postman、junit、swagger,此處基于?postman

>錯(cuò)誤格式


>正確格式


總結(jié)

以上是生活随笔為你收集整理的SpringBoot 轻松搞定数据验证 (二)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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