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

 更新时间:2020年09月07日 11:20:45   作者:果果虫  
这篇文章主要介绍了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整合redis实现发布订阅功能介绍步骤

    Springboot整合redis实现发布订阅功能介绍步骤

    发布订阅作为一种设计思想在很多开源组件中都有体现,比如大家熟知的消息中间件等,可谓把发布订阅这一思想体现的淋漓尽致了
    2022-09-09
  • java连接mysql数据库详细步骤解析

    java连接mysql数据库详细步骤解析

    以下是对java连接mysql数据库的具体详细步骤进行了分析介绍,需要的朋友可以过来参考下
    2013-08-08
  • IDEA搭建dubbo项目的过程及存在的问题

    IDEA搭建dubbo项目的过程及存在的问题

    这篇文章主要介绍了IDEA搭建dubbo项目及存在的问题小结,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-04-04
  • Java EasyExcel导入带图片的完整过程记录

    Java EasyExcel导入带图片的完整过程记录

    这篇文章主要介绍了关于结合EasyExcel和ApachePOI来实现Excel数据批量导入并读取图片的过程,文中通过图文以及代码介绍的非常详细,需要的朋友可以参考下
    2024-12-12
  • java自定义jar包让jmeter使用的方法

    java自定义jar包让jmeter使用的方法

    在本篇文章里小编给大家整理了一篇关于java自定义jar包让jmeter使用的方法以及实例代码,需要的朋友们参考下。
    2019-10-10
  • springboot基于docsify 实现随身文档

    springboot基于docsify 实现随身文档

    这篇文章主要介绍了springboot基于docsify实现随身文档的相关资料,需要的朋友可以参考下
    2022-09-09
  • 浅谈一下Java中的ReentrantLock

    浅谈一下Java中的ReentrantLock

    这篇文章主要介绍了浅谈一下Java中的ReentrantLock,这个类是JUC工具包中对线程安全问题提供的一种解决方案,它主要是用来给对象上锁,保证同一时间这能有一个线程在访问当前对象,需要的朋友可以参考下
    2023-09-09
  • Java虚拟机JVM类加载机制(从类文件到虚拟机)

    Java虚拟机JVM类加载机制(从类文件到虚拟机)

    所谓的类加载机制就是虚拟机将class文件加载到内存,并对数据进行验证,转换解析和初始化,形成虚拟机可以直接使用的java类型,本文给大家介绍类加载机制过程从类文件到虚拟机的详细说明,感兴趣的朋友跟随小编一起看看吧
    2021-06-06
  • 基于@LastModifiedDate不起作用的解决方案

    基于@LastModifiedDate不起作用的解决方案

    这篇文章主要介绍了基于@LastModifiedDate不起作用的解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-10-10
  • Java参数传递及值传递实现原理详解

    Java参数传递及值传递实现原理详解

    这篇文章主要介绍了Java参数传递及值传递实现原理详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-08-08

最新评论