001package cn.sticki.validator.spel; 002 003import javax.validation.constraints.NotNull; 004import java.lang.annotation.*; 005 006/** 007 * 将注解标记为由 {@link SpelValid} 进行校验的Bean验证约束。 008 * <p> 009 * 该注解的属性 {@link SpelConstraint#validatedBy()} 用于指定校验器的实现类,实现类需要实现 {@link SpelConstraintValidator} 接口。 010 * <p> 011 * 每个约束注释必须包含以下属性: 012 * <ul> 013 * <li>{@code String message() default [...];} 用于指定约束校验失败时的错误消息。 014 * </li> 015 * <li>{@code String condition() default "";} 用于指定约束开启条件的SpEL表达式。 016 * 当 表达式为空 或 计算结果为true 时,才会对带注解的元素进行校验。 017 * </li> 018 * <li>{@code String[] group() default {};} 用于指定约束开启的分组条件,必须为合法的SpEL表达式。 019 * 当分组信息不为空时,只有当 {@link SpelValid#spelGroups()} 中的分组信息与此处的分组信息有交集时,才会对带注解的元素进行校验。 020 * 其计算结果可以是任何类型,但只有两个计算结果完全相等时,才被认为是相等的。 021 * </li> 022 * </ul> 023 * <p> 024 * 这里有一些定义约束的例子,可以参考: 025 * <ul> 026 * <li>{@link cn.sticki.validator.spel.constrain.SpelAssert}</li> 027 * <li>{@link cn.sticki.validator.spel.constrain.SpelNotNull}</li> 028 * </ul> 029 * 030 * @author 阿杆 031 * @version 1.0 032 * @see SpelValid 033 * @see SpelConstraintValidator 034 * @since 2024/4/11 035 */ 036@NotNull 037@Documented 038@Target(ElementType.ANNOTATION_TYPE) 039@Retention(RetentionPolicy.RUNTIME) 040public @interface SpelConstraint { 041 042 /** 043 * 校验器的实现类,用于校验被标记的注解。 044 */ 045 Class<? extends SpelConstraintValidator<?>> validatedBy(); 046 047}