Java Validation Api如何实现自定义注解
背景
官方提供的注解多数可以解决现实业务场景中基本业务校验,但有些特殊场景因业务的复杂性,也还是需要在入口处对入参进行各种角度的校验,以求简化业务层的处理,降低业务处理复杂性与方法入口的强约束性。以上背景,下面就举个简单Demo进行自定义注解校验的实现。
注解定义类
importjavax.validation.Constraint;
importjavax.validation.Payload;
importjava.lang.annotation.ElementType;
importjava.lang.annotation.Retention;
importjava.lang.annotation.RetentionPolicy;
importjava.lang.annotation.Target;
/**
*@authorwpp
*@date2020/8/2214:30
*/
@Target({ElementType.FIELD,ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy=PhoneCustomizeValidator.class)
public@interfaceCustomizeValidator{
Stringmessage()default"不是国内手机号";
Class>[]groups()default{};
Class[]payload()default{};
}
注解方法处理类
importcn.hutool.core.util.StrUtil; importjavax.validation.ConstraintValidator; importjavax.validation.ConstraintValidatorContext; importjava.util.regex.Pattern; /** *@authorwpp *@date2020/8/2214:33 */ publicclassPhoneCustomizeValidatorimplementsConstraintValidator{ privateStringphoneRegex="^(16[0-9]|19[0-9]|13[0-9]|15[012356789]|17[0-9]|18[0-9]|14[0-9])[0-9]{8}$"; privatePatternphonePattern=Pattern.compile(phoneRegex); @Override publicvoidinitialize(CustomizeValidatorconstraintAnnotation){ } @Override publicbooleanisValid(Stringvalue,ConstraintValidatorContextcontext){ if(StrUtil.isBlank(value)){ returnBoolean.FALSE; } returnphonePattern.matcher(value).matches(); } }
使用方式
importio.swagger.annotations.ApiModelProperty;
importlombok.Builder;
importlombok.Data;
importorg.hibernate.validator.constraints.Length;
/**
*@authorwpp
*@date2020/8/2214:49
*/
@Data
@Builder
publicclassCustomizeDTO{
@ApiModelProperty(name="phone",value="手机号码")
@Length(max=13)
privateStringphone;
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。