自定义注解
自定义注解
元注解
修饰注解的注解。
注解的解析
解析类上的注解
注解的应用场景
State自定义注解
import com.itheima.validation.StateValidation;
import jakarta.validation.Constraint;
import jakarta.validation.Payload;
import java.lang.annotation.*;
import java.lang.reflect.Field;
@Documented // 元注解,用来标识state注解可以用来抽取到帮助文档中的
// @Target标识将来用在哪些地方
@Target({ElementType.FIELD}) // 例如 类上、属性上、方法上、参数上
// 该注解用在属性上 所以为FIELD
@Retention(RetentionPolicy.RUNTIME) // 注解保留在运行阶段
@Constraint(validatedBy = {StateValidation.class}) // 谁提供校验的规则 指定提供校验规则的类
public @interface State {
// 校验失败后的信息
String message() default "state参数的值只能是已发布或者草稿";
// 指定分组
Class<?>[] groups() default {};
// 负载 获取到State注解的附加信息
Class<? extends Payload>[] payload() default {};
}
StateValidation.java
import com.itheima.anno.State;
import jakarta.validation.ConstraintValidator;
import jakarta.validation.ConstraintValidatorContext;
// ConstraintValidator<给哪个注解提供校验规则, 校验的数据类型>
public class StateValidation implements ConstraintValidator<State, String> {
@Override // String value 将来要校验的数据
public boolean isValid(String value, ConstraintValidatorContext context) {
// 提供校验规则
if (value == null) {
return false; // return false; 返回false校验不通过
}
if (value.equals("已发布") || value.equals("草稿")) {
return true;
}
return false;
}
}