欢迎来到代码驿站!

当前位置:首页 >

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

时间:2020-09-07 13:00:22|栏目:|点击:

背景

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

上一篇:Python pymsql模块的使用

栏    目:

下一篇:R语言ggplot2边框背景去除的实现

本文标题:Java Validation Api如何实现自定义注解

本文地址:http://www.codeinn.net/misctech/4635.html

推荐教程

广告投放 | 联系我们 | 版权申明

重要申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。

如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

联系QQ:914707363 | 邮箱:codeinn#126.com(#换成@)

Copyright © 2020 代码驿站 版权所有