Java Validation Api如何实现自定义注解
作者:果果虫
这篇文章主要介绍了Java Validation Api如何实现自定义注解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
背景
官方提供的注解多数可以解决现实业务场景中基本业务校验,但有些特殊场景因业务的复杂性,也还是需要在入口处对入参进行各种角度的校验,以求简化业务层的处理,降低业务处理复杂性与方法入口的强约束性。 以上背景,下面就举个简单Demo进行自定义注解校验的实现。
注解定义类
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 "不是国内手机号";
  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
@Builder
public class CustomizeDTO {
  @ApiModelProperty(name = "phone", value = "手机号码")
  @Length(max = 13)
  private String phone;
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
您可能感兴趣的文章:
- Springboot项目javax.validation使用方法详解
 - java validation 后台参数验证的使用详解
 - java使用Validation进行数据校验的方式总结
 - JAVA中通过Hibernate-Validation进行参数验证
 - JAVA中的字段校验(validation)
 - 使用javax.validation.constraints对请求体进行统一校验
 - Java参数校验中validation和validator的区别详解
 - Java Validation Api实现原理解析
 - Javax Validation自定义注解进行身份证号校验
 - Java使用validation拦截非法提交的数据的方法实现
 
