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

Hibernate Validation自定義注解校驗的實現(xiàn)

 更新時間:2019年04月16日 09:11:20   作者:xcmercy  
這篇文章主要介紹了Hibernate Validation自定義注解校驗的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

情景:需要對String類型的屬性比如description進行驗證,驗證規(guī)則是當description為空時不進行正則校驗,description不為空時進行正則校驗。上述需求Hibernate Validation沒有可用于上述需求的注解,故自定義一個注解并自定義校驗規(guī)則。

自定義注解進行校驗的步驟

  • 寫一個校驗注解,在注解中指定校驗器類,校驗注解與校驗器一般一一對應。
  • 寫一個校驗器類并在校驗器類中寫校驗邏輯,校驗器必須實現(xiàn)ConstraintValidator<?, ?>接口,第一個參數(shù)是對應的注解,第二個參數(shù)是要校驗的屬性的類型

代碼示例

校驗注解

package com.kunlun.validation.annotation;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

import javax.validation.Constraint;
import javax.validation.Payload;

import com.kunlun.validation.validator.KlPatternValidator;

/**
 * 自定義的校驗注解
 * 規(guī)則:
 * 1.如果字符串為空串或者為null,則不進行正則校驗
 * 2.如果字符串不為空串,則必須進行正則校驗
 * @author xc
 * @date 2018年1月19日上午11:38:02
 */
@Documented
// 指定該注解可以使用的地方
@Target(value= {ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
// 指定實際進行校驗的校驗器,該校驗器是自己寫的且必須實現(xiàn)ConstraintValidator接口
@Constraint(validatedBy=KlPatternValidator.class)
public @interface KlPattern {
  /*
   * 用于驗證的注解下列這三個方法必須要,這是Hibernate Validation框架要求的,否則程序再在調(diào)用的時候會報錯
   * default用于對屬性給定默認值
   * 如果不給定默認值,則在使用注解的時候必須給屬性指定屬性值,否則報錯
   * 給定默認值時,在使用注解的時候可以不用指定屬性值
   */
  String message() default "不符合正則!";

  Class<?>[] groups() default {};

  Class<? extends Payload>[] payload() default {};

  // 沒加default給定默認值,使用注解的時候該屬性必須賦值,否則報錯
  String regex();
  // value屬性,加上了default "mercy" 使得該屬性在使用注解的時候可以不用輸入也不會報錯
  String value() default "mercy";
}

與上面校驗注解對應的校驗器類

package com.kunlun.validation.validator;
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;

import com.kunlun.validation.annotation.KlPattern;

/**
 * KlPatternValidator是KlPattern注解實際調(diào)用的驗證器
 * 在KlPatternValidator中完成校驗邏輯
 * 
 * @author xc
 * @date 2018年1月19日上午11:44:38
 */
public class KlPatternValidator implements ConstraintValidator<KlPattern, String> {

  private String regex;

  /**
   * 通過initialize()可以獲取注解里的屬性值
   */
  @Override
  public void initialize(KlPattern constraintAnnotation) {
    ConstraintValidator.super.initialize(constraintAnnotation);
    regex = constraintAnnotation.regex();
  }

  /**
   * 實際驗證邏輯
   * 返回值為true表示驗證通過,
   * 返回值為false表示驗證未通過
   */
  @Override
  public boolean isValid(String s, ConstraintValidatorContext ctx) {

    // 當前前端傳過來的請求參數(shù)是空串,或者沒傳的時候,不進行后續(xù)正則校驗
    if ("".equals(s) || s == null) {
      return true;
    }

    // 進行正則校驗
    if(s.matches(regex)) {
      return true;
    }

    return false;
  }
}

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • Spring靜態(tài)代理和動態(tài)代理代碼詳解

    Spring靜態(tài)代理和動態(tài)代理代碼詳解

    這篇文章主要介紹了Spring靜態(tài)代理和動態(tài)代理代碼詳解,具有一定參考價值,需要的朋友可以了解下。
    2017-11-11
  • 使用Spring底層組件實現(xiàn)Aware接口

    使用Spring底層組件實現(xiàn)Aware接口

    這篇文章主要介紹了使用Spring底層組件實現(xiàn)Aware接口,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-07-07
  • 高并發(fā)下如何避免重復數(shù)據(jù)產(chǎn)生技巧

    高并發(fā)下如何避免重復數(shù)據(jù)產(chǎn)生技巧

    這篇文章主要為大家介紹了高并發(fā)下如何避免重復數(shù)據(jù)的產(chǎn)生技巧詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-07-07
  • SpringBoot+Mybatis plus+React實現(xiàn)條件選擇切換搜索實踐

    SpringBoot+Mybatis plus+React實現(xiàn)條件選擇切換搜索實踐

    本文主要介紹了SpringBoot+Mybatis plus+React實現(xiàn)條件選擇切換搜索實踐,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • Springboot解決ajax+自定義headers的跨域請求問題

    Springboot解決ajax+自定義headers的跨域請求問題

    由于瀏覽器同源策略(同源策略,它是由Netscape提出的一個著名的安全策略,現(xiàn)在所有支持JavaScript 的瀏覽器都會使用這個策略。接下來通過本文給大家介紹Springboot如何優(yōu)雅的解決ajax+自定義headers的跨域請求 ,需要的朋友可以參考下
    2019-05-05
  • Java深入講解instanceof關鍵字的使用

    Java深入講解instanceof關鍵字的使用

    instanceof 是 Java 的一個二元操作符,類似于 ==,>,< 等操作符。instanceof 是 Java 的保留關鍵字。它的作用是測試它左邊的對象是否是它右邊的類的實例,返回 boolean 的數(shù)據(jù)類型
    2022-05-05
  • 使用Java實現(xiàn)動態(tài)生成MySQL數(shù)據(jù)庫

    使用Java實現(xiàn)動態(tài)生成MySQL數(shù)據(jù)庫

    這篇文章主要為大家詳細介紹了如何使用Java實現(xiàn)動態(tài)生成MySQL數(shù)據(jù)庫,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2024-02-02
  • Java實現(xiàn)手寫線程池實例并測試詳解

    Java實現(xiàn)手寫線程池實例并測試詳解

    這篇文章主要來模擬一下線程池和工作隊列的流程,以及編寫代碼和測試類進行測試。文中的示例代碼講解詳細,感興趣的小伙伴可以了解一下
    2023-02-02
  • mybatis 忽略實體對象的某個屬性(2種方式)

    mybatis 忽略實體對象的某個屬性(2種方式)

    這篇文章主要介紹了mybatis 忽略實體對象的某個屬性方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • 使用svn管理Maven項目的方法步驟

    使用svn管理Maven項目的方法步驟

    這篇文章主要介紹了使用svn管理Maven項目的方法步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-08-08

最新評論

长顺县| 德州市| 鞍山市| 上思县| 阿勒泰市| 宁国市| 枝江市| 玛曲县| 瑞昌市| 宜章县| 台湾省| 上高县| 长治县| 米林县| 临朐县| 台前县| 神农架林区| 南和县| 加查县| 永修县| 新乐市| 芦山县| 桐乡市| 永定县| 西贡区| 个旧市| 长泰县| 峨眉山市| 渝中区| 丽水市| 阿拉善左旗| 抚远县| 双桥区| 深水埗区| 将乐县| 犍为县| 乌审旗| 凤台县| 乐安县| 兴安县| 白山市|