怎么在Hibernate中Validation自定義注解實現(xiàn)校驗?相信很多沒有經(jīng)驗的人對此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個問題。
創(chuàng)新互聯(lián)專業(yè)為企業(yè)提供鳳泉網(wǎng)站建設(shè)、鳳泉做網(wǎng)站、鳳泉網(wǎng)站設(shè)計、鳳泉網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計與制作、鳳泉企業(yè)網(wǎng)站模板建站服務(wù),十載鳳泉做網(wǎng)站經(jīng)驗,不只是建網(wǎng)站,更提供有價值的思路和整體網(wǎng)絡(luò)服務(wù)。
自定義注解進(jìn)行校驗的步驟
寫一個校驗注解,在注解中指定校驗器類,校驗注解與校驗器一般一一對應(yīng)。
寫一個校驗器類并在校驗器類中寫校驗邏輯,校驗器必須實現(xiàn)ConstraintValidator, ?>接口,第一個參數(shù)是對應(yīng)的注解,第二個參數(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; @Documented // 指定該注解可以使用的地方 @Target(value= {ElementType.FIELD}) @Retention(RetentionPolicy.RUNTIME) // 指定實際進(jìn)行校驗的校驗器,該校驗器是自己寫的且必須實現(xiàn)ConstraintValidator接口 @Constraint(validatedBy=KlPatternValidator.class) public @interface KlPattern { /* * 用于驗證的注解下列這三個方法必須要,這是Hibernate Validation框架要求的,否則程序再在調(diào)用的時候會報錯 * default用于對屬性給定默認(rèn)值 * 如果不給定默認(rèn)值,則在使用注解的時候必須給屬性指定屬性值,否則報錯 * 給定默認(rèn)值時,在使用注解的時候可以不用指定屬性值 */ String message() default "不符合正則!"; Class>[] groups() default {}; Class extends Payload>[] payload() default {}; // 沒加default給定默認(rèn)值,使用注解的時候該屬性必須賦值,否則報錯 String regex(); // value屬性,加上了default "mercy" 使得該屬性在使用注解的時候可以不用輸入也不會報錯 String value() default "mercy"; }
與上面校驗注解對應(yīng)的校驗器類
package com.kunlun.validation.validator; import javax.validation.ConstraintValidator; import javax.validation.ConstraintValidatorContext; import com.kunlun.validation.annotation.KlPattern; public class KlPatternValidator implements ConstraintValidator{ 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) { // 當(dāng)前前端傳過來的請求參數(shù)是空串,或者沒傳的時候,不進(jìn)行后續(xù)正則校驗 if ("".equals(s) || s == null) { return true; } // 進(jìn)行正則校驗 if(s.matches(regex)) { return true; } return false; } }
看完上述內(nèi)容,你們掌握怎么在Hibernate中Validation自定義注解實現(xiàn)校驗的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!