Hibernate Validation自定義注解校驗的實現
更新時間:2019年04月16日 09:11:20 作者:xcmercy
這篇文章主要介紹了Hibernate Validation自定義注解校驗的實現,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
情景:需要對String類型的屬性比如description進行驗證,驗證規(guī)則是當description為空時不進行正則校驗,description不為空時進行正則校驗。上述需求Hibernate Validation沒有可用于上述需求的注解,故自定義一個注解并自定義校驗規(guī)則。
自定義注解進行校驗的步驟
- 寫一個校驗注解,在注解中指定校驗器類,校驗注解與校驗器一般一一對應。
- 寫一個校驗器類并在校驗器類中寫校驗邏輯,校驗器必須實現ConstraintValidator<?, ?>接口,第一個參數是對應的注解,第二個參數是要校驗的屬性的類型
代碼示例
校驗注解
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) // 指定實際進行校驗的校驗器,該校驗器是自己寫的且必須實現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"; }
與上面校驗注解對應的校驗器類
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) { // 當前前端傳過來的請求參數是空串,或者沒傳的時候,不進行后續(xù)正則校驗 if ("".equals(s) || s == null) { return true; } // 進行正則校驗 if(s.matches(regex)) { return true; } return false; } }
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
Java面試題之HashMap 的 hash 方法原理是什么
那天,小二去蔚來面試,面試官老王一上來就問他:HashMap 的 hash 方法的原理是什么?當時就把裸面的小二給蚌埠住了,這篇文章將詳細解答該題目2021-11-11SpringBoot Jpa企業(yè)開發(fā)示例詳細講解
這篇文章主要介紹了SpringBoot Jpa企業(yè)開發(fā)示例,Jpa可以通過實體類生成數據庫的表,同時自帶很多增刪改查方法,大部分sql語句不需要我們自己寫,配置完成后直接調用方法即可,很方便2022-11-11Springboot程序在使用Maven下載依賴時失效的解決方法
以前能成功創(chuàng)建SpringBoot項目并運行,但是現在再創(chuàng)建新項目時Maven下載依賴失敗,且maven依賴刷新按鍵一直沒反應,所以本文給大家介紹了Springboot程序在使用Maven下載依賴時失效的解決方法,需要的朋友可以參考下2024-05-05