Java Validation Api如何实现自定义注解
程序员文章站
2024-01-01 10:28:58
背景官方提供的注解多数可以解决现实业务场景中基本业务校验,但有些特殊场景因业务的复杂性,也还是需要在入口处对入参进行各种角度的校验,以求简化业务层的处理,降低业务处理复杂性与方法入口的强约束性。 以上...
背景
官方提供的注解多数可以解决现实业务场景中基本业务校验,但有些特殊场景因业务的复杂性,也还是需要在入口处对入参进行各种角度的校验,以求简化业务层的处理,降低业务处理复杂性与方法入口的强约束性。 以上背景,下面就举个简单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; }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。