一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|JavaScript|易語(yǔ)言|

服務(wù)器之家 - 編程語(yǔ)言 - Java教程 - Hibernate Validation自定義注解校驗(yàn)的實(shí)現(xiàn)

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

2021-08-01 11:54xcmercy Java教程

這篇文章主要介紹了Hibernate Validation自定義注解校驗(yàn)的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(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沒(méi)有可用于上述需求的注解,故自定義一個(gè)注解并自定義校驗(yàn)規(guī)則。

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

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

代碼示例

校驗(yàn)注解

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
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)器是自己寫(xiě)的且必須實(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 {};
 
  // 沒(méi)加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)器類

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
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;
 
  /**
   * 通過(guò)initialize()可以獲取注解里的屬性值
   */
  @override
  public void initialize(klpattern constraintannotation) {
    constraintvalidator.super.initialize(constraintannotation);
    regex = constraintannotation.regex();
  }
 
  /**
   * 實(shí)際驗(yàn)證邏輯
   * 返回值為true表示驗(yàn)證通過(guò),
   * 返回值為false表示驗(yàn)證未通過(guò)
   */
  @override
  public boolean isvalid(string s, constraintvalidatorcontext ctx) {
 
    // 當(dāng)前前端傳過(guò)來(lái)的請(qǐng)求參數(shù)是空串,或者沒(méi)傳的時(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;
  }
}

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持服務(wù)器之家。

原文鏈接:https://blog.csdn.net/cccmercy/article/details/79105624

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 成人丁香婷婷 | 免费看片黄色 | 楚乔传第二部免费播放电视连续剧 | 国产福利资源网在线观看 | 久久精品男人影院 | 国产精品短视频 | 激情视频激情小说 | 我要色色网| 亚洲AV久久无码精品九九软件 | 92国产福利视频一区二区 | 草莓视频丝瓜 | 调教小荡娃h | poronovideos变态极限 | 日韩毛片免费在线观看 | 99热这里有免费国产精品 | 四虎1515hhcom| 91精品国产91久久久久 | 亚洲 欧美 日韩 综合 | 韩国久播影院理论片不卡影院 | 免费在线看片网站 | 国产精品视频2020 | 欧美日韩一区二区综合在线视频 | 男人猛戳女人下部30分钟 | chinese野外gay军人 | 五月天中文在线 | 日本不卡免免费观看 | 亚洲精品国产乱码AV在线观看 | 色ccc36| 青柠在线完整高清观看免费 | 我与恶魔的h生活ova | 国产香蕉97碰碰在线视频 | 果冻传媒在线播放观看w | 午夜想想爱 | 无码爽死成人777在线观看网站 | 日韩精品在线一区二区 | 精品午夜久久网成年网 | 日产免费自线一二区 | 色综合综合色 | 明星ai智能人脸替换造梦在线播放 | 99精品视频一区在线观看miya | 日本不卡在线视频高清免费 |