找回密码
 立即注册
查看: 3|回复: 0

32,自定义校验

[复制链接]

231

主题

6

精华

235

金币

技术维护QQ:515138

积分
500
发表于 昨天 17:16 | 显示全部楼层 |阅读模式
    已有的注解不能满足所有的校验需求,特殊的情况需要自定义校验(自定义校验注解)
1.jpg

1,定义校验类:
2.jpg

代码如下:
  1. package com.jinhei.validation;
  2. import com.jinhei.anno.State;
  3. import jakarta.validation.ConstraintValidator;
  4. import jakarta.validation.ConstraintValidatorContext;
  5. // 给哪个注解提供校验规则  State,验证的数据类型String
  6. public class StateValidation implements ConstraintValidator<State,String> {
  7.     /**
  8.      *
  9.      * @param value 将来要校验的数据
  10.      * @param context context in which the constraint is evaluated
  11.      *
  12.      * @return 如果返回false,则校验不通过,如果返回true,则校验通过
  13.      */
  14.     @Override
  15.     public boolean isValid(String value, ConstraintValidatorContext context) {
  16.         //提供校验规则
  17.         if (value == null){
  18.             return false;
  19.         }
  20.         if (value.equals("已发布") || value.equals("草稿")){
  21.             return true;
  22.         }
  23.         return false;
  24.     }
  25. }
复制代码
2,自定义注解:
3.jpg

  1. package com.jinhei.anno;
  2. import com.jinhei.validation.StateValidation;
  3. import jakarta.validation.Constraint;
  4. import jakarta.validation.Payload;
  5. import java.lang.annotation.Documented;
  6. import java.lang.annotation.Retention;
  7. import java.lang.annotation.Target;
  8. import static java.lang.annotation.ElementType.FIELD;
  9. import static java.lang.annotation.RetentionPolicy.RUNTIME;
  10. @Documented//元注解
  11. @Target({ FIELD})//元注解
  12. @Retention(RUNTIME)//元注解
  13. @Constraint(validatedBy = { StateValidation.class})//指定提供校验规则的类
  14. public @interface State {
  15.     //提供校验失败后的提示信息
  16.     String message() default "state参数的值只能是已发布或者草稿";
  17.     //指定分组
  18.     Class<?>[] groups() default { };
  19.     //负载  获取到State注解的附加信息
  20.     Class<? extends Payload>[] payload() default { };
  21. }
复制代码
3,实体上使用注解@State

  1. package com.jinhei.pojp;
  2. import com.jinhei.anno.State;
  3. import jakarta.validation.constraints.NotEmpty;
  4. import jakarta.validation.constraints.NotNull;
  5. import jakarta.validation.constraints.Pattern;
  6. import lombok.Data;
  7. import org.hibernate.validator.constraints.URL;
  8. import java.time.LocalDateTime;
  9. @Data
  10. public class Article {
  11.     private Integer id;//主键ID
  12.     @NotEmpty
  13.     @Pattern(regexp = "^\\S{1,10}$")
  14.     private String title;//文章标题
  15.     @NotEmpty
  16.     private String content;//文章内容
  17.     @NotEmpty
  18.     @URL
  19.     private String coverImg;//封面图像
  20.     @State
  21.     private String state;//发布状态 已发布|草稿
  22.     @NotNull
  23.     private Integer categoryId;//文章分类id
  24.     private Integer createUser;//创建人ID
  25.     private LocalDateTime createTime;//创建时间
  26.     private LocalDateTime updateTime;//更新时间
  27. }
复制代码
4.jpg


上一篇:31,分组校验
下一篇:33,@RequestParam(required = false)参数不是必须,不是必填写法
网站建设,公众号小程序开发,系统定制,软件App开发,技术维护【联系我们】手机/微信:17817817816 QQ:515138

QQ|Archiver|自丢网 ( 粤ICP备2024252464号-1 )

GMT+8, 2026-3-3 06:50

专注于网站建设,公众号小程序制作,商城小程序,系统定制,软件App开发

【联系我们】手机/微信:17817817816 QQ:515138

快速回复 返回顶部 返回列表