Java Validation Api如何實現(xiàn)自定義注解
背景
官方提供的注解多數(shù)可以解決現(xiàn)實業(yè)務(wù)場景中基本業(yè)務(wù)校驗,但有些特殊場景因業(yè)務(wù)的復(fù)雜性,也還是需要在入口處對入?yún)⑦M(jìn)行各種角度的校驗,以求簡化業(yè)務(wù)層的處理,降低業(yè)務(wù)處理復(fù)雜性與方法入口的強(qiáng)約束性。 以上背景,下面就舉個簡單Demo進(jìn)行自定義注解校驗的實現(xiàn)。
注解定義類
import javax.validation.Constraint;import javax.validation.Payload;import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target;/** * @author wpp * @date 2020/8/22 14:30 */@Target({ElementType.FIELD, ElementType.METHOD})@Retention(RetentionPolicy.RUNTIME)@Constraint(validatedBy = PhoneCustomizeValidator.class)public @interface CustomizeValidator { String message() default '不是國內(nèi)手機(jī)號'; Class<?>[] groups() default {}; Class<? extends Payload>[] payload() default {};}
注解方法處理類
import cn.hutool.core.util.StrUtil;import javax.validation.ConstraintValidator;import javax.validation.ConstraintValidatorContext;import java.util.regex.Pattern;/** * @author wpp * @date 2020/8/22 14:33 */public class PhoneCustomizeValidator implements ConstraintValidator<CustomizeValidator, String> { private String phoneRegex = '^(16[0-9]|19[0-9]|13[0-9]|15[012356789]|17[0-9]|18[0-9]|14[0-9])[0-9]{8}$'; private Pattern phonePattern = Pattern.compile(phoneRegex); @Override public void initialize(CustomizeValidator constraintAnnotation) { } @Override public boolean isValid(String value, ConstraintValidatorContext context) { if (StrUtil.isBlank(value)) { return Boolean.FALSE; } return phonePattern.matcher(value).matches(); }}
使用方式
import io.swagger.annotations.ApiModelProperty;import lombok.Builder;import lombok.Data;import org.hibernate.validator.constraints.Length;/** * @author wpp * @date 2020/8/22 14:49 */@Data@Builderpublic class CustomizeDTO { @ApiModelProperty(name = 'phone', value = '手機(jī)號碼') @Length(max = 13) private String phone;}
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。
相關(guān)文章:
1. ASP.NET Core自定義中間件的方式詳解2. 用xslt+css讓RSS顯示的跟網(wǎng)頁一樣漂亮3. 《CSS3實戰(zhàn)》筆記--漸變設(shè)計(一)4. CSS3實現(xiàn)動態(tài)翻牌效果 仿百度貼吧3D翻牌一次動畫特效5. 移動端HTML5實現(xiàn)拍照功能的兩種方法6. 讓chatgpt將html中的圖片轉(zhuǎn)為base64方法示例7. 教你JS更簡單的獲取表單中數(shù)據(jù)(formdata)8. html5手機(jī)觸屏touch事件介紹9. ASP.NET MVC把數(shù)據(jù)庫中枚舉項的數(shù)字轉(zhuǎn)換成文字10. 測試模式 - XSL教程 - 5
