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;
}

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

相关文章

  • java序列化和serialVersionUID的使用方法实例

    java序列化和serialVersionUID的使用方法实例

    这篇文章主要介绍了java序列化和serialVersionUID的使用方法实例的相关资料,这里说明很详细的使用方法让你彻底学会,需要的朋友可以参考下
    2017-08-08
  • Java使用Math.random()结合蒙特卡洛方法计算pi值示例

    Java使用Math.random()结合蒙特卡洛方法计算pi值示例

    这篇文章主要介绍了Java使用Math.random()结合蒙特卡洛方法计算pi值的方法,简单说明了结合具体实例蒙特卡洛方法的原理,并结合具体实例形式分析了java使用蒙特卡洛方法计算PI值的操作技巧,需要的朋友可以参考下
    2017-09-09
  • SpringMVC框架REST架构体系原理分析

    SpringMVC框架REST架构体系原理分析

    REST:Representational State Transfer,资源表现层状态转换,是目前&#12112;较主流的&#12032;种互联网软件架构,它结构清晰、标准规范、易于理解、便于扩展
    2021-09-09
  • 解析Java的JVM以及类与对象的概念

    解析Java的JVM以及类与对象的概念

    这篇文章主要介绍了解析Java的JVM以及类与对象的概念,是Java入门学习中的基础知识,需要的朋友可以参考下
    2015-09-09
  • java数据结构与算法之马踏棋盘

    java数据结构与算法之马踏棋盘

    这篇文章主要为大家详细介绍了java数据结构与算法之马踏棋盘,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-02-02
  • java中Class.forName的作用浅谈

    java中Class.forName的作用浅谈

    这篇文章介绍了java中Class.forName的作用,有需要的朋友可以参考一下
    2013-11-11
  • 详解java中的6种单例写法及优缺点

    详解java中的6种单例写法及优缺点

    在java中,单例有很多种写法,面试时,手写代码环节,除了写算法题,有时候也会让手写单例模式,这里记录一下单例的几种写法和优缺点。需要的朋友可以参考下
    2018-11-11
  • Java WeakHashMap案例详解

    Java WeakHashMap案例详解

    这篇文章主要介绍了Java WeakHashMap案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-08-08
  • Java实现系统限流的示例代码

    Java实现系统限流的示例代码

    限流是保障系统高可用的方式之一,也是大厂高频面试题,它在微服务系统中,缓存、限流、熔断是保证系统高可用的三板斧,所以本文我们就来聊聊如何实现系统限流吧
    2023-09-09
  • 你都理解创建线程池的参数吗?

    你都理解创建线程池的参数吗?

    这篇文章主要介绍了创建线程池参数,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-04-04

最新评论