SpringBoot使用自定义校验
文章目录
- 一、概述
- 二、使用步骤
- 自定义注解State
- 自定义校验数据的类StateValidation实现ConstraintValidator接口
- 在需要校验的地方使用自定义注解State
- 三、参考资料
一、概述
已有的注解不能满足所有的校验需求,特殊的情况需要自定义校验(自定义校验注解)
如:文章的state的值只能为已发布或者草稿
二、使用步骤
自定义注解State
anno/State.java
package com.itheima.anno;import com.itheima.validation.StateValidation;import java.lang.annotation.Target;import static java.lang.annotation.ElementType.FIELD;@java.lang.annotation.Documented //元注解
@Target({FIELD}) // 元注解,使用在字段上
@java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.RUNTIME) // 作用于运行时
@jakarta.validation.Constraint(validatedBy = {StateValidation.class}) // 指定校验规则的类
public @interface State {//提供默认的错误消息java.lang.String message() default "{stage参数的值只能是已发布或者草稿}";//指定分组java.lang.Class<?>[] groups() default {};//负载,获取State注解的附加信息java.lang.Class<? extends jakarta.validation.Payload>[] payload() default {};
}
自定义校验数据的类StateValidation实现ConstraintValidator接口
validation/StateValidation.java
package com.itheima.validation;import com.itheima.anno.State;
import jakarta.validation.ConstraintValidator;
import jakarta.validation.ConstraintValidatorContext;public class StateValidation implements ConstraintValidator<State, String> {/*** 校验方法* @param value 将来要校验的数据* @param context* @return 返回false不通过,返回true通过*/@Overridepublic boolean isValid(String value, ConstraintValidatorContext context) {//提供校验规则if ("已发布".equals(value) || "草稿".equals(value)){return true;}return false;}
}
在需要校验的地方使用自定义注解State
三、参考资料
https://www.bilibili.com/video/BV14z4y1N7pg?spm_id_from=333.788.player.switch&vd_source=0467ab39cc5ec5940fee22a0e7797575&p=33