|
已有的注解不能满足所有的校验需求,特殊的情况需要自定义校验(自定义校验注解)
1,定义校验类:
代码如下:
- package com.jinhei.validation;
-
- import com.jinhei.anno.State;
- import jakarta.validation.ConstraintValidator;
- import jakarta.validation.ConstraintValidatorContext;
- // 给哪个注解提供校验规则 State,验证的数据类型String
- public class StateValidation implements ConstraintValidator<State,String> {
- /**
- *
- * @param value 将来要校验的数据
- * @param context context in which the constraint is evaluated
- *
- * @return 如果返回false,则校验不通过,如果返回true,则校验通过
- */
- @Override
- public boolean isValid(String value, ConstraintValidatorContext context) {
- //提供校验规则
- if (value == null){
- return false;
- }
- if (value.equals("已发布") || value.equals("草稿")){
- return true;
- }
- return false;
- }
- }
复制代码 2,自定义注解:
- package com.jinhei.anno;
-
- import com.jinhei.validation.StateValidation;
- import jakarta.validation.Constraint;
- import jakarta.validation.Payload;
-
- import java.lang.annotation.Documented;
- import java.lang.annotation.Retention;
- import java.lang.annotation.Target;
-
- import static java.lang.annotation.ElementType.FIELD;
- import static java.lang.annotation.RetentionPolicy.RUNTIME;
-
- @Documented//元注解
- @Target({ FIELD})//元注解
- @Retention(RUNTIME)//元注解
- @Constraint(validatedBy = { StateValidation.class})//指定提供校验规则的类
- public @interface State {
- //提供校验失败后的提示信息
- String message() default "state参数的值只能是已发布或者草稿";
- //指定分组
- Class<?>[] groups() default { };
- //负载 获取到State注解的附加信息
- Class<? extends Payload>[] payload() default { };
- }
复制代码 3,实体上使用注解@State
- package com.jinhei.pojp;
-
-
- import com.jinhei.anno.State;
- import jakarta.validation.constraints.NotEmpty;
- import jakarta.validation.constraints.NotNull;
- import jakarta.validation.constraints.Pattern;
- import lombok.Data;
- import org.hibernate.validator.constraints.URL;
-
- import java.time.LocalDateTime;
- @Data
- public class Article {
- private Integer id;//主键ID
- @NotEmpty
- @Pattern(regexp = "^\\S{1,10}$")
- private String title;//文章标题
- @NotEmpty
- private String content;//文章内容
- @NotEmpty
- @URL
- private String coverImg;//封面图像
- @State
- private String state;//发布状态 已发布|草稿
- @NotNull
- private Integer categoryId;//文章分类id
- private Integer createUser;//创建人ID
- private LocalDateTime createTime;//创建时间
- private LocalDateTime updateTime;//更新时间
- }
复制代码
|