欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

自定義注解進(jìn)行校驗(yàn)的步驟

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

代碼示例

校驗(yàn)注解

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;

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

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

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

  // 沒加default給定默認(rèn)值,使用注解的時(shí)候該屬性必須賦值,否則報(bào)錯(cuò)
  String regex();
  // value屬性,加上了default "mercy" 使得該屬性在使用注解的時(shí)候可以不用輸入也不會(huì)報(bào)錯(cuò)
  String value() default "mercy";
}

與上面校驗(yàn)注解對(duì)應(yīng)的校驗(yàn)器類

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

import com.kunlun.validation.annotation.KlPattern;

/**
 * KlPatternValidator是KlPattern注解實(shí)際調(diào)用的驗(yàn)證器
 * 在KlPatternValidator中完成校驗(yàn)邏輯
 * 
 * @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();
  }

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

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

    // 進(jìn)行正則校驗(yàn)
    if(s.matches(regex)) {
      return true;
    }

    return false;
  }
}

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

相關(guān)文章

  • Java使用JDBC連接數(shù)據(jù)庫的詳細(xì)步驟

    Java使用JDBC連接數(shù)據(jù)庫的詳細(xì)步驟

    本文詳細(xì)講解了Java使用JDBC連接數(shù)據(jù)庫的詳細(xì)步驟,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-01-01
  • Java面試題之HashMap 的 hash 方法原理是什么

    Java面試題之HashMap 的 hash 方法原理是什么

    那天,小二去蔚來面試,面試官老王一上來就問他:HashMap 的 hash 方法的原理是什么?當(dāng)時(shí)就把裸面的小二給蚌埠住了,這篇文章將詳細(xì)解答該題目
    2021-11-11
  • java 反射機(jī)制

    java 反射機(jī)制

    本文主要介紹了java反射機(jī)制的相關(guān)知識(shí),具有一定的參考價(jià)值,下面跟著小編一起來看下吧
    2017-02-02
  • SpringBoot靜態(tài)資源目錄訪問

    SpringBoot靜態(tài)資源目錄訪問

    今天小編就為大家分享一篇關(guān)于SpringBoot靜態(tài)資源目錄訪問,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • java中關(guān)于getProperties方法的使用

    java中關(guān)于getProperties方法的使用

    這篇文章主要介紹了java中關(guān)于getProperties方法的使用,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • SpringBoot Jpa企業(yè)開發(fā)示例詳細(xì)講解

    SpringBoot Jpa企業(yè)開發(fā)示例詳細(xì)講解

    這篇文章主要介紹了SpringBoot Jpa企業(yè)開發(fā)示例,Jpa可以通過實(shí)體類生成數(shù)據(jù)庫的表,同時(shí)自帶很多增刪改查方法,大部分sql語句不需要我們自己寫,配置完成后直接調(diào)用方法即可,很方便
    2022-11-11
  • Java實(shí)現(xiàn)哈希表的基本功能

    Java實(shí)現(xiàn)哈希表的基本功能

    今天教大家怎么用Java實(shí)現(xiàn)哈希表的基本功能,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)java的小伙伴們有非常好的幫助,需要的朋友可以參考下
    2021-05-05
  • Springboot程序在使用Maven下載依賴時(shí)失效的解決方法

    Springboot程序在使用Maven下載依賴時(shí)失效的解決方法

    以前能成功創(chuàng)建SpringBoot項(xiàng)目并運(yùn)行,但是現(xiàn)在再創(chuàng)建新項(xiàng)目時(shí)Maven下載依賴失敗,且maven依賴刷新按鍵一直沒反應(yīng),所以本文給大家介紹了Springboot程序在使用Maven下載依賴時(shí)失效的解決方法,需要的朋友可以參考下
    2024-05-05
  • Centos下SpringBoot項(xiàng)目啟動(dòng)與停止腳本的方法

    Centos下SpringBoot項(xiàng)目啟動(dòng)與停止腳本的方法

    這篇文章主要介紹了Centos下SpringBoot項(xiàng)目啟動(dòng)與停止腳本的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-11-11
  • SpringBoot實(shí)現(xiàn)WEB的常用功能案例詳解

    SpringBoot實(shí)現(xiàn)WEB的常用功能案例詳解

    這篇文章主要介紹了SpringBoot實(shí)現(xiàn)WEB的常用功能,本文將對(duì)Spring Boot實(shí)現(xiàn)Web開發(fā)中涉及的三大組件Servlet、Filter、Listener以及文件上傳下載功能以及打包部署進(jìn)行實(shí)現(xiàn),需要的朋友可以參考下
    2022-04-04

最新評(píng)論