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

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|JavaScript|易語言|

服務器之家 - 編程語言 - Java教程 - Hibernate Validation自定義注解校驗的實現

Hibernate Validation自定義注解校驗的實現

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

這篇文章主要介紹了Hibernate Validation自定義注解校驗的實現,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

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

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

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

代碼示例

校驗注解

?
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;
 
/**
 * 自定義的校驗注解
 * 規則:
 * 1.如果字符串為空串或者為null,則不進行正則校驗
 * 2.如果字符串不為空串,則必須進行正則校驗
 * @author xc
 * @date 2018年1月19日上午11:38:02
 */
@documented
// 指定該注解可以使用的地方
@target(value= {elementtype.field})
@retention(retentionpolicy.runtime)
// 指定實際進行校驗的校驗器,該校驗器是自己寫的且必須實現constraintvalidator接口
@constraint(validatedby=klpatternvalidator.class)
public @interface klpattern {
  /*
   * 用于驗證的注解下列這三個方法必須要,這是hibernate validation框架要求的,否則程序再在調用的時候會報錯
   * default用于對屬性給定默認值
   * 如果不給定默認值,則在使用注解的時候必須給屬性指定屬性值,否則報錯
   * 給定默認值時,在使用注解的時候可以不用指定屬性值
   */
  string message() default "不符合正則!";
 
  class<?>[] groups() default {};
 
  class<? extends payload>[] payload() default {};
 
  // 沒加default給定默認值,使用注解的時候該屬性必須賦值,否則報錯
  string regex();
  // value屬性,加上了default "mercy" 使得該屬性在使用注解的時候可以不用輸入也不會報錯
  string value() default "mercy";
}

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

?
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注解實際調用的驗證器
 * 在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) {
 
    // 當前前端傳過來的請求參數是空串,或者沒傳的時候,不進行后續正則校驗
    if ("".equals(s) || s == null) {
      return true;
    }
 
    // 進行正則校驗
    if(s.matches(regex)) {
      return true;
    }
 
    return false;
  }
}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。

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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 暖暖影院日本版 | 操女人的b| 九色PORNY真实丨国产大胸 | 国产hd老头老太婆 | 国产一区二区三区免费在线视频 | 涩色爱 | 免费一区二区 | 91免费永久在线地址 | 国产九九视频在线观看 | 男人天堂色 | 国内永久第一免费福利视频 | 91桃色视频在线观看 | 亚洲AV精品一区二区三区不卡 | 国产美女操 | 手机av| 四虎最新网址在线观看 | 天天乐影院 | 99r在线观看 | 欧美区视频 | 亚洲高清网站 | 日本精品一卡二卡≡卡四卡 | 免费国产午夜高清在线视频 | 短篇艳妇系列 | 天天综合亚洲 | asspics大尿chinese | 国产一卡2卡3卡四卡国色天香 | 高清男的插曲女的 欢迎你老狼 | 日本草草视频在线观看 | 国产成人精品视频一区 | 熟睡中的麻麻大白屁股小说 | 美人老师沦为 | 久久久久久免费观看 | 亚洲精品久久久久AV无码 | 99在线在线视频免费视频观看 | 韩国漂亮美女三级在线观看 | 国产精品视频一区二区三区经 | 亚洲精品中文 | 亚洲邪恶天堂影院在线观看 | 国产自拍影院 | 午夜久 | 欧美在线成人免费国产 |