@Validation 的自定义校验实现, Spring Boot 和 java
参考 NotEmpty.class的内容:
package jakarta.validation.constraints;import jakarta.validation.Constraint;
import jakarta.validation.Payload;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Repeatable;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;@Documented
@Constraint(validatedBy = {}
)
@Target({ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE, ElementType.CONSTRUCTOR, ElementType.PARAMETER, ElementType.TYPE_USE})
@Retention(RetentionPolicy.RUNTIME)
@Repeatable(List.class)
public @interface NotEmpty {String message() default "{jakarta.validation.constraints.NotEmpty.message}";Class<?>[] groups() default {};Class<? extends Payload>[] payload() default {};@Target({ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE, ElementType.CONSTRUCTOR, ElementType.PARAMETER, ElementType.TYPE_USE})@Retention(RetentionPolicy.RUNTIME)@Documentedpublic @interface List {NotEmpty[] value();}
}
生成自定义规则
创建包, annotation
创建类
@Documented
@Constraint(validatedBy = {}
)
@Target({FIELD})
@Retention(RUNTIME)
public @interface State {// 错误提示String message() default STATE_VALIDATION_ERROR;Class<?>[] groups() default {};// 负载,获得 state 附加信息 —— 大部分情况下不需要处理Class<? extends Payload>[] payload() default {};}
说明: @Target 是使用范围
创建包, validation
创建类
public class StateValidation implements ConstraintValidator<State, String> {@Overridepublic void initialize(State constraintAnnotation) {ConstraintValidator.super.initialize(constraintAnnotation);}@Overridepublic boolean isValid(String s, ConstraintValidatorContext constraintValidatorContext) {return false;}
}
类,要继承一个接口 ;并且声明泛型 ——
ConstraintValidator<(给那个注解提供校验规则)State, (校验的数据类型)String>
类是 State ,见上面的 创建类 。
校验规则如下
public class StateValidation implements ConstraintValidator<State, String> {/**** @param s 被校验的数据* @param constraintValidatorContext* @return false 校验失败 ; true 校验通过 */@Overridepublic boolean isValid(String s, ConstraintValidatorContext constraintValidatorContext) {// 校验规则if (s == null) {return false;}if (s.equals("校验的value")) {return true;}return false;}
}
最后,给 state 提供校验规则的类
参见: validatedBy = {StateValidation.class}
@Documented
@Constraint(validatedBy = {StateValidation.class} // 校验规则的类
)
@Target({FIELD})
@Retention(RUNTIME)
public @interface State {