直接来步骤
第一步:增加验证依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
第二步:创建annotation注解目录
第三步:开始创建验证器以验证长度为例
@Constraint 中指定进行验证的验证方法类
@Documented
@Target(value = {ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = LengthValidator.class)
public @interface LengthValid {
/** 报错信息 */
String message() default "长度不符合规范";
/** 最小值 */
int min() default 0;
/** 最大值 */
int max() default Integer.MAX_VALUE;
Class<?>[] groups() default { };
Class<? extends Payload>[] payload() default { };
}
第四步:创建验证方法类
public class LengthValidator implements ConstraintValidator<LengthValid,Object> {
private LengthValid annotation;
@Override
public void initialize(LengthValid constraintAnnotation) {
annotation = constraintAnnotation;
}
@Override
public boolean isValid(Object value, ConstraintValidatorContext constraintValidatorContext) {
if( null == value ){
return true;
}
try {
int len = String.valueOf(value).length();
if( len >= annotation.min() && len <= annotation.max()){
return true;
}
} catch (Exception e) {
throw new RuntimeException(e);
}
return false;
}
}
基于以上的四步,我们就已经创建完成了自定义的注解验证。接下来是如何使用:
仅仅只需要在实体属性上增加相关的注解就可以使用了
@LengthValid(min=2,max = 100,message = "姓名只支持最短2位最长100位") private String name;
以上就完成了自定义验证类了。
下面在给大家提供一个枚举值验证的方法,不需要的可以不往下看了
增加自定义枚举验证类
下面直接上注解和处理类及使用方法。
一、注解:
@Documented
@Target(value = {ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = EnumValidator.class)
public @interface EnumValid {
/** 报错信息 */
String message() default "枚举字符不存在";
/** 枚举类 */
Class<?> clazz();
/** 枚举获取值方法 */
String method();
Class<?>[] groups() default { };
Class<? extends Payload>[] payload() default { };
}
二、处理类:
public class EnumValidator implements ConstraintValidator<EnumValid,Object> {
private EnumValid annotation;
@Override
public void initialize(EnumValid constraintAnnotation) {
annotation = constraintAnnotation;
}
@Override
public boolean isValid(Object value, ConstraintValidatorContext constraintValidatorContext) {
//如果传的参数为null 不需要验证枚举中是否存在
if( null == value ){
return true;
}
//获取枚举类数据
Object[] enumConstants = annotation.clazz().getEnumConstants();
//获取方法
try {
//获取枚举类获取code的方法
Method method = annotation.clazz().getMethod(annotation.method());
for (Object enumConstant : enumConstants) {
//循环枚举类数据,并通过method反射获取与value判断是否相等
if(value.equals(method.invoke(enumConstant))){
return true;
}
}
} catch (Exception e) {
throw new RuntimeException(e);
}
return false;
}
}
三、使用方法:
//clazz代表的是枚举类 method是枚举类提供的获取方法 getCode获取枚举类中的code值 @EnumValid(clazz = TypeEnum.class,message = "类型不存在",method = "getCode") private Integer type;