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

SpringValidation自定义注解以及分组校验

SpringValidation的参数校验使用可参考:【SpringMVC应用篇】Spring Validation 参数校验-CSDN博客

目录

1. 引入依赖

2. 自定义注解校验

2.1 创建Validation类

2.2 创建注解对象

2.3 使用注解

3. 分组校验

3.1 实体类内部定义接口

3.2 在参数上指定分组


1. 引入依赖

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId><version>3.2.0</version>
</dependency>

2. 自定义注解校验

使用场景:已有的注解不能满足所有的校验需求,特殊的情况需要自定义校验(自定义校验注解)。 实现自定义注解可以通过模仿,SpringValidation提供的其他注解进行改写。

举例说明:

我有一个实体类,其中一个参数state需要接收到前端数据后进行校验(要求该参数只能是 已发布 或者 草稿)。而SpringValidation提供的注解无法满足我的需求,此时便需要自定义注解。

2.1 创建Validation类

注意:该类需要实现 ConstraintValidator接口,并实现 isValid( )方法。方法内即是校验规则, 我这里只是提供参考。请自行根据业务需求更改。

import jakarta.validation.ConstraintValidator;
import jakarta.validation.ConstraintValidatorContext;/*** ConstraintValidator<State, String>前一个代表需要校验的注解,后一个代表校验类型*/
public class Validation implements ConstraintValidator<State, String> {/**** @param value 将来要校验的数据* @param constraintValidatorContext* @return*/@Overridepublic boolean isValid(String value, ConstraintValidatorContext constraintValidatorContext) {//校验规则if (value == null) {return false;}if (value.equals("已发布") || value.equals("草稿")) {return true;}return false;}
}

2.2 创建注解对象

注解名称,请根据自己业务需求更改。
import jakarta.validation.Constraint;
import jakarta.validation.Payload;import java.lang.annotation.*;@Documented //元注解,代表可在文档显示
@Constraint(validatedBy = {Validation.class} //指定提供校验规则的类,该类需要自己指定
)
//元注解,代表注解适用的对象(方法、字段、注解、类、属性)
@Target({ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE, ElementType.CONSTRUCTOR, ElementType.PARAMETER, ElementType.TYPE_USE})
@Retention(RetentionPolicy.RUNTIME) //元注解,代表注解的作用范围
public @interface State {//报错提示String message() default "state参数只能是已发布或者草稿";Class<?>[] groups() default {};Class<? extends Payload>[] payload() default {};
}

2.3 使用注解

找到对应的实体类,在需要校验的参数上添加该注解即可。例如我这里需要对state进行校验。

3. 分组校验

分组校验是指把校验项进行归类分组,在完成不同的功能的时候,校验指定组中的校验项。
分组校验常用于增加和修改操作时对数据的校验。
分组校验的 流程:
1.定义分组 
2.定义校验项时指定归属的分组
3.校验时指定要校验的分组

3.1 实体类内部定义接口

3.2 在参数上指定分组

3.3 给@Validated注解赋值
注意: 如果在方法上对参数进行校验,需要在类上添加@Validated注解。如果在实体类中对成员遍历进行校验,需要在使用到这个类的接口方法中添加@Validated注解
最后最后!!!各位看官觉得有用就收藏、点赞、评论一下吧。我看到问题后,我会第一时间回复的!  

相关文章:

  • 第6章-第1节-Java中基本数据类型的包装类
  • 松松2023年工作汇报
  • 通过data恢复postgresql
  • 【蓝桥杯】比赛大纲整理
  • RK3568驱动指南|第九篇 设备模型-第95章 创建属性文件并实现读写功能实验1
  • 详解卡尔曼滤波(Kalman Filter)
  • vue常见面试题
  • C++:第十一讲DFS深搜
  • 后端开发——jdbc的学习(一)
  • 企业微信会话存档sdk报错:A fatal error has been detected by the Java Runtime Environment
  • 【MySQL】数据库中为什么使用B+树不用B树
  • 冒泡排序算法
  • 集群部署篇--Redis 集群动态伸缩
  • Wpf 使用 Prism 实战开发Day08
  • FTP简介及搭建计算机端口的介绍
  • #Java异常处理
  • (ckeditor+ckfinder用法)Jquery,js获取ckeditor值
  • 【402天】跃迁之路——程序员高效学习方法论探索系列(实验阶段159-2018.03.14)...
  • 【Redis学习笔记】2018-06-28 redis命令源码学习1
  • Go 语言编译器的 //go: 详解
  • Hexo+码云+git快速搭建免费的静态Blog
  • Javascript 原型链
  • java第三方包学习之lombok
  • Spring Cloud Alibaba迁移指南(一):一行代码从 Hystrix 迁移到 Sentinel
  • SpringCloud集成分布式事务LCN (一)
  • SQL 难点解决:记录的引用
  • ⭐ Unity 开发bug —— 打包后shader失效或者bug (我这里用Shader做两张图片的合并发现了问题)
  • Vue组件定义
  • Wamp集成环境 添加PHP的新版本
  • 第13期 DApp 榜单 :来,吃我这波安利
  • 对话 CTO〡听神策数据 CTO 曹犟描绘数据分析行业的无限可能
  • 工作踩坑系列——https访问遇到“已阻止载入混合活动内容”
  • 精益 React 学习指南 (Lean React)- 1.5 React 与 DOM
  • 设计模式走一遍---观察者模式
  • 小程序、APP Store 需要的 SSL 证书是个什么东西?
  • 湖北分布式智能数据采集方法有哪些?
  • ​油烟净化器电源安全,保障健康餐饮生活
  • #宝哥教你#查看jquery绑定的事件函数
  • (+3)1.3敏捷宣言与敏捷过程的特点
  • (12)目标检测_SSD基于pytorch搭建代码
  • (9)目标检测_SSD的原理
  • (Matlab)使用竞争神经网络实现数据聚类
  • (八)光盘的挂载与解挂、挂载CentOS镜像、rpm安装软件详细学习笔记
  • (初研) Sentence-embedding fine-tune notebook
  • (附源码)计算机毕业设计大学生兼职系统
  • (论文阅读22/100)Learning a Deep Compact Image Representation for Visual Tracking
  • (一)eclipse Dynamic web project 工程目录以及文件路径问题
  • (原創) 如何解决make kernel时『clock skew detected』的warning? (OS) (Linux)
  • (转)利用ant在Mac 下自动化打包签名Android程序
  • .NET CF命令行调试器MDbg入门(一)
  • .NET/C# 在代码中测量代码执行耗时的建议(比较系统性能计数器和系统时间)...
  • .NET中GET与SET的用法
  • /dev/sda2 is mounted; will not make a filesystem here!
  • @test注解_Spring 自定义注解你了解过吗?
  • [ C++ ] STL---仿函数与priority_queue