时间:2021-05-20
背景
官方提供的注解多数可以解决现实业务场景中基本业务校验,但有些特殊场景因业务的复杂性,也还是需要在入口处对入参进行各种角度的校验,以求简化业务层的处理,降低业务处理复杂性与方法入口的强约束性。 以上背景,下面就举个简单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@Builderpublic class CustomizeDTO { @ApiModelProperty(name = "phone", value = "手机号码") @Length(max = 13) private String phone;}以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
前言之前写了一个博客是关于使用SpringBoot使用validation-api实现参数校验,当时使用的注解都是validation-api自带的注解只能完成
本文实例讲述了Java自定义注解用法。分享给大家供大家参考,具体如下:一自定义注解语法[public]@interfaceAnnotation的名称{[数据类型
springmvc自定义注解以及自定义注解的解析一、自定义注解名字@Target({ElementType.TYPE,ElementType.METHOD})/
此例子,用于说明如何在Java中对“注解Annotation”的定义、使用和解析的操作。注解一般用于自定义开发框架中,至于为什么使用,此处不作过多说明,这里只说
java中自定义回调事件的写法创建interface类,创建interface对象,实现set方法:使用:kotlin中自定义点击事件写法依照java的思想(不