頻道 > 生活 >   >  正文

        【Java】使用 validation 完成自定義校驗注解

        評論

        總括:

        validation 讓我們簡化了開發(fā)過程,可以使用簡單的一個注解就實現(xiàn)了很多常見的檢驗數(shù)據(jù)的功能,同時支持自定義注解。spring-boot-starter-validation 是由 Spring Boot 整合的一套用于處理validation 的約定化自動配置啟動器。Spring 系列框架通過簡單的安裝依賴即可直接使用 validation 提供的參數(shù)校驗功能,通過為接口添加 @Valid / @Validated 對特定參數(shù)進(jìn)行校驗。

        使用方法:

        1. 安裝依賴

            org.springframework.boot    spring-boot-starter-validation

        如果已使用 Spring Boot 框架可以不指定版本號,依賴于Spring Boot 版本。


        (資料圖)

        2. 接口參數(shù)添加@Valid / @Validated 進(jìn)行參數(shù)校驗

        @RequestMapping("/doLogin")@ResponseBodypublic ResponseBean doLogin(@Valid LoginVo loginVo, HttpServletRequest request, HttpServletResponse response) {    return userService.doLogin(loginVo, request, response);}

        3. 在需要進(jìn)行校驗的參數(shù)的屬性上使用validation 基礎(chǔ)注解

        /* 空檢查 */@Null     // 驗證對象是否為null@NotNull        // 驗證對象是否不為null, 無法查檢長度為0的字符串@NotBlank      // 檢查約束字符串是不是Null還有被Trim的長度是否大于0,只對字符串,且會去掉前后空格.@NotEmpty      // 檢查約束元素是否為NULL或者是EMPTY. /* Booelan檢查 */@AssertTrue      // 驗證 Boolean 對象是否為 true  @AssertFalse         // 驗證 Boolean 對象是否為 false  /* 長度檢查 */@Size(min=, max=)   // 驗證對象(Array,Collection,Map,String)長度是否在給定的范圍之內(nèi)  @Length(min=, max=)    // 驗證注解的元素值長度在min和max區(qū)間內(nèi)/* 日期檢查 */@Past          // 驗證 Date 和 Calendar 對象是否在當(dāng)前時間之前  @Future          // 驗證 Date 和 Calendar 對象是否在當(dāng)前時間之后  @Pattern          // 驗證 String 對象是否符合正則表達(dá)式的規(guī)則/* 數(shù)值檢查,建議使用在Stirng,Integer類型,不建議使用在int類型上,因為表單值為“”時無法轉(zhuǎn)換為int,但可以轉(zhuǎn)換為Stirng為"",Integer為null */@Min      // 驗證 Number 和 String 對象是否大等于指定的值  @Max      // 驗證 Number 和 String 對象是否小等于指定的值  @DecimalMax     // 被標(biāo)注的值必須不大于約束中指定的最大值. 這個約束的參數(shù)是一個通過BigDecimal定義的最大值的字符串表示.小數(shù)存在精度@DecimalMin     // 被標(biāo)注的值必須不小于約束中指定的最小值. 這個約束的參數(shù)是一個通過BigDecimal定義的最小值的字符串表示.小數(shù)存在精度@Digits          // 驗證 Number 和 String 的構(gòu)成是否合法  @Digits(integer=,fraction=) // 驗證字符串是否是符合指定格式的數(shù)字,interger指定整數(shù)精度,fraction指定小數(shù)精度。@Range(min=, max=) // 驗證注解的元素值在最小值和最大值之間 @Range(min=10000,max=50000,message="range.bean.wage")/* 其他檢驗 */@Valid               // 寫在方法參數(shù)前,遞歸的對該對象進(jìn)行校驗, 如果關(guān)聯(lián)對象是個集合或者數(shù)組,那么對其中的元素進(jìn)行遞歸校驗,如果是一個map,則對其中的值部分進(jìn)行校驗.(是否進(jìn)行遞歸驗證)@CreditCardNumber    // 信用卡驗證@Email               // 驗證是否是郵件地址,如果為null,不進(jìn)行驗證,算通過驗證。@ScriptAssert(lang= ,script=, alias=) // 簡單腳本校驗@URL(protocol=,host=, port=,regexp=, flags=) // IP地址校驗                

        4. 自定義參數(shù)校驗注解

        4.1 自定義注解

        可以照抄@NotNull 等基礎(chǔ)校驗注解的寫法

        @Target({ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE, ElementType.CONSTRUCTOR, ElementType.PARAMETER, ElementType.TYPE_USE})@Retention(RetentionPolicy.RUNTIME)@Documented@Constraint(        validatedBy = {IsMobileValidator.class})public @interface IsMobile {    boolean required() default true;    String message() default "手機(jī)號碼格式錯誤";    Class[] groups() default {};    Class[] payload() default {};}

        4.2 實現(xiàn)ConstraintValidator 接口,用以實現(xiàn)自定義參數(shù)校驗邏輯

        public class IsMobileValidator implements ConstraintValidator {      private boolean required = false;   /**   *@Param: {@link IsMobile } constraintAnnotation   *@Return: void   *@TODO: 初始化方法,可以用自定義注解中獲取值進(jìn)行初始化    **/    @Override    public void initialize(IsMobile constraintAnnotation) {        required = constraintAnnotation.required();    }       /**    *@Param: {@link String} value   *@Param: {@link ConstraintValidatorContext } constraintValidatorContext   *@Return: {@link boolean}   *@TODO: 實際校驗自定義注解 value 值   **/    @Override    public boolean isValid(String value, ConstraintValidatorContext constraintValidatorContext) {        if(required){            return ValidatorUtil.isMobile(value);        }else {            if(StringUtils.isEmpty(value)){                return true;            }else {                return ValidatorUtil.isMobile(value);            }        }    }}

        其中IsMobile 為自定義注解名(根據(jù)個人需求自己命名),isValid 方法具體校驗邏輯由個人需求及業(yè)務(wù)確定。使用時同基礎(chǔ)校驗注解一般放置在需要校驗的參數(shù)屬性上即可。

        注意:自定義注解上必須有@Constraint 注解,其中validatedBy 指定執(zhí)行校驗的類,該類必須實現(xiàn)ConstraintValidator 接口

        標(biāo)簽:

        今日熱點

        熱點排行

        最近更新

        所刊載信息部分轉(zhuǎn)載自互聯(lián)網(wǎng),并不代表本網(wǎng)贊同其觀點和對其真實性負(fù)責(zé)。郵箱:5855973@qq.com

        聯(lián)系我們| 中國品牌網(wǎng) | 滬ICP備2022005074號-18 營業(yè)執(zhí)照  Copyright © 2018@. All Rights Reserved.

        国产成人综合亚洲绿色| 亚洲精品第一国产综合境外资源 | 久热综合在线亚洲精品| 亚洲午夜未满十八勿入网站2| 97亚洲熟妇自偷自拍另类图片| 色欲色欲天天天www亚洲伊| 亚洲av之男人的天堂网站| 亚洲精品久久无码av片俺去也 | 亚洲中文字幕无码一去台湾| 亚洲AV无码乱码精品国产| 亚洲国产成人精品无码久久久久久综合 | 亚洲国产高清视频在线观看| 日本中文一区二区三区亚洲| 亚洲AV第一页国产精品| 久久久久亚洲国产AV麻豆| 亚洲avav天堂av在线不卡| 亚洲国产精品无码久久| 亚洲Av无码国产一区二区| 偷自拍亚洲视频在线观看99| 亚洲精品网站在线观看不卡无广告 | 亚洲精品乱码久久久久久不卡| 亚洲高清视频免费| 久久久无码精品亚洲日韩软件 | 亚洲永久在线观看| 亚洲AV成人精品网站在线播放| 亚洲av区一区二区三| 国产亚洲精久久久久久无码77777 国产亚洲精品成人AA片新蒲金 | 亚洲AⅤ无码一区二区三区在线| 亚洲欧洲日产韩国在线| 亚洲精品高清无码视频| 伊人久久亚洲综合影院| 亚洲二区在线视频| 久久久久亚洲Av片无码v | 午夜亚洲AV日韩AV无码大全| 亚洲av麻豆aⅴ无码电影| 国产精品亚洲四区在线观看| 亚洲AV第一页国产精品| 国产精品亚洲视频| 亚洲av无一区二区三区| 亚洲另类自拍丝袜第1页| 亚洲高清在线观看|