当前位置: 首页 > ds >正文

@Validation 的自定义校验实现, Spring Boot 和 java

参考 NotEmpty.class的内容:

package jakarta.validation.constraints;import jakarta.validation.Constraint;
import jakarta.validation.Payload;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Repeatable;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;@Documented
@Constraint(validatedBy = {}
)
@Target({ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE, ElementType.CONSTRUCTOR, ElementType.PARAMETER, ElementType.TYPE_USE})
@Retention(RetentionPolicy.RUNTIME)
@Repeatable(List.class)
public @interface NotEmpty {String message() default "{jakarta.validation.constraints.NotEmpty.message}";Class<?>[] groups() default {};Class<? extends Payload>[] payload() default {};@Target({ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE, ElementType.CONSTRUCTOR, ElementType.PARAMETER, ElementType.TYPE_USE})@Retention(RetentionPolicy.RUNTIME)@Documentedpublic @interface List {NotEmpty[] value();}
}

生成自定义规则

创建包, annotation 

创建类

@Documented
@Constraint(validatedBy = {}
)
@Target({FIELD})
@Retention(RUNTIME)
public @interface State {// 错误提示String message() default STATE_VALIDATION_ERROR;Class<?>[] groups() default {};// 负载,获得 state 附加信息 —— 大部分情况下不需要处理Class<? extends Payload>[] payload() default {};}

说明: @Target 是使用范围

创建包, validation 

创建类

public class StateValidation implements ConstraintValidator<State, String> {@Overridepublic void initialize(State constraintAnnotation) {ConstraintValidator.super.initialize(constraintAnnotation);}@Overridepublic boolean isValid(String s, ConstraintValidatorContext constraintValidatorContext) {return false;}
}

类,要继承一个接口 ;并且声明泛型 —— 

ConstraintValidator<(给那个注解提供校验规则)State, (校验的数据类型)String> 

类是 State ,见上面的 创建类 。

校验规则如下

public class StateValidation implements ConstraintValidator<State, String> {/**** @param s 被校验的数据* @param constraintValidatorContext* @return  false 校验失败 ; true 校验通过 */@Overridepublic boolean isValid(String s, ConstraintValidatorContext constraintValidatorContext) {// 校验规则if (s == null) {return false;}if (s.equals("校验的value")) {return true;}return false;}
}

最后,给 state 提供校验规则的类

参见: validatedBy = {StateValidation.class} 

@Documented
@Constraint(validatedBy = {StateValidation.class} // 校验规则的类
)
@Target({FIELD})
@Retention(RUNTIME)
public @interface State {

http://www.xdnf.cn/news/14234.html

相关文章:

  • 实现网页中嵌入B站视频播放器:解决high_quality=1 失效的问题
  • struct stat结构体
  • NY230NY233美光固态闪存NY237NY246
  • 【Transformer拆解】-2. 位置编码(Positional Encoding)
  • 一个密码实现库crypto-work
  • Pandas数据工程深度解析
  • 四数之和-力扣
  • XSS (Reflected)-反射型XSS
  • 晶振常见封装工艺及其特点
  • 深入讲解 Ollama 的源码
  • 【Java多线程从青铜到王者】定时器的原理和实现(十一)
  • Spring依赖注入源码学习:基于XML配置的DI源码解析
  • PGCP:用于比较基因组学的植物基因组综合数据库-文献精读144
  • 信息学奥赛一本通 1543:【例 3】与众不同
  • ubuntu之坑(十四)——安装FFmpeg进行本地视频推流(在海思平台上运行)
  • UVM同步的方法
  • RPT:预训练新范式,用强化学习做预训练!
  • 生成式AI如何与RPA融合?
  • Cursor-1.0安装Jupyter-Notebook,可视化运行.ipynb文件中Python分片代码
  • 使用麒麟V10操作系统的KVM服务,但麒麟V10存在高危漏洞无法修复?
  • 【运维】iDRAC、Lifecycle Controller、Unified Server Configurator 的区别
  • 【1/2, 2/3, 3/5, 5/8, 8/13, ...写一个函数,计算以下数列的前10项之和,在主函数中调用该函数并输出结果。】2022-5-19
  • 成都鼎讯短波通信信号模拟设备:短波频段的电磁模拟王者​
  • 【iSAQB软件架构】良好的设计技术
  • spring:使用注解@Configuration、@ComponentScan创建配置类(未完待续)
  • mysql8数据库本地能连上但是远程连不上
  • AI作画提示词:Prompts工程技巧与最佳实践
  • GEO指南之内容创业者:AI时代的“品牌大模型种草”与IP推荐力打造
  • OSPF基础实验案例
  • Java登录验证后台实现详解