已有的注解不能满足所有的校验需求,特殊的情况需要自定义校验(自定义校验注解)
- 自定义注解state
- 建包anno
- 建State (Annotation)
- 建包anno
package walker.anno;
import jakarta.validation.Constraint;
import jakarta.validation.Payload;
import java.lang.annotation.*;
@Documented// 元注解
@Target({ElementType.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 实现ConstraintValidator接口
- 建包validation
- 建StateValidation类
- 建包validation
package walker.validation;
import jakarta.validation.ConstraintValidator;
import jakarta.validation.ConstraintValidatorContext;
import walker.anno.State;
// <给那个注解提供校验规则,校验的数据类型>
public class StateValidation implements ConstraintValidator<State, String> {
/**
*
* @param value 将来要校验的数据
* @param context
* @return false , 校验不通过
*/
@Override
public boolean isValid(String value, ConstraintValidatorContext context) {
// 提供校验规则
if (value == null) {
return false;
}
if (value.equals("已发布") || value.equals("草稿")) {
return true;
}
return false;
}
}
- 在需要校验的地方使用自定义注解
@State
private String state;//发布状态 已发布|草稿