Flask接口签名sign原理与实例代码浅析
292
2022-11-23
Java Validation Api如何实现自定义注解
背景
官方提供的注解多数可以解决现实业务场景中基HRZMU本业务校验,但有些特殊场景因业务的复杂性,也还是需要在入口处对入参进行各种角度的校验,以求简化业务层的处理,降低业务处理复杂性与方法入口的强约束性。 以上背景,下面就举个简单Demo进行自定义注解校验的实现。
注解定义类
import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annoHRZMUtation.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 "不是国内手机号";
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
private String phoneRegex = "^(16[0-9]|19[0-9]|13[0-9]|15[012356789]|17[0-9]|18[0-9]|14[0-9])[0HRZMU-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
@Builder
public class CustomizeDTO {
@ApiModelProperty(name = "phone", value = "手机号码")
@Length(max = 13)
private String phone;
}
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~