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

网友投稿 292 2022-11-23


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

背景

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

注解定义类

import javax.validation.Constraint;

import javax.validation.Payload;

import java.lang.annotation.ElementType;

import java.lang.annotation.Retention;

import java.lang.annoHRZMUtation.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 {

private String phoneRegex = "^(16[0-9]|19[0-9]|13[0-9]|15[012356789]|17[0-9]|18[0-9]|14[0-9])[0HRZMU-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;

}


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:idea将maven项目改成Spring boot项目的方法步骤
下一篇:Jmeter分布式压力测试实现过程详解
相关文章

 发表评论

暂时没有评论,来抢沙发吧~