当前位置: 移动技术网 > IT编程>开发语言>Java > Java Validation Api如何实现自定义注解

Java Validation Api如何实现自定义注解

2020年09月08日  | 移动技术网IT编程  | 我要评论
背景官方提供的注解多数可以解决现实业务场景中基本业务校验,但有些特殊场景因业务的复杂性,也还是需要在入口处对入参进行各种角度的校验,以求简化业务层的处理,降低业务处理复杂性与方法入口的强约束性。 以上

背景

官方提供的注解多数可以解决现实业务场景中基本业务校验,但有些特殊场景因业务的复杂性,也还是需要在入口处对入参进行各种角度的校验,以求简化业务层的处理,降低业务处理复杂性与方法入口的强约束性。 以上背景,下面就举个简单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;
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持移动技术网。

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网