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注解
最后最后!!!各位看官觉得有用就收藏、点赞、评论一下吧。我看到问题后,我会第一时间回复的!  

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/586853.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

git回滚操作,常用场景

文章目录 git回滚操作1.git reset --hard 【版本号】2.回滚后的版本v2又想回到之前的版本v32.1 git reflog 3.git checkout -- 文件名4.git reset HEAD 文件名 git回滚操作 假设我们现在有三个版本 现在回滚一个版本 1.git reset --hard 【版本号】 发现只剩下两个版本了 2.…

51单片机的中断相关知识

51单片机的中断相关知识点 一、中断概念和功能 概念 程序执行过程中CPU会遇到一些特殊情况&#xff0c;是正在执行的程序被“中断”&#xff0c;cpu中止原来正在执行的程序&#xff0c;转到处理异常情况或特殊事件的程序去执行&#xff0c;结束后再返回到原被中止的程序处(断…

计算机网络——计算大题(七)

前言&#xff1a; 最近也是在准备计算机考试&#xff0c;我们的考试形式是上机考试&#xff0c;所以可能有些计算题是会给提供思路的&#xff0c;前面已经对本学期的计算机网络知识有了一个简单的认识与了解&#xff0c;现在我们就来对计算大题进行一个学习吧&#xff0c;这里的…

中医电子处方系统,西医个体诊所门诊卫生室病历记录查询软件教程

中医电子处方系统&#xff0c;西医个体诊所门诊卫生室病历记录查询软件教程 一、软件程序问答 1、电子处方软件如何快速开单&#xff1f; 如下图&#xff0c;软件以 佳易王诊所电子处方管理系统V17.1版本为例说明 在开电子处方的时候可以按单个药品开&#xff0c;也可以直…

面试 Java 基础八股文五问五答第六期

面试 Java 基础八股文五问五答第六期 作者&#xff1a;程序员小白条 相信看了本文后&#xff0c;对你的面试是有一定帮助的&#xff01; ⭐点赞⭐收藏⭐不迷路&#xff01;⭐ 1&#xff09;什么是跨域&#xff1f; 跨域问题是指在浏览器中&#xff0c;由于同源策略的限制&am…

【开源】基于Vue+SpringBoot的二手车交易系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 二手车档案管理模块2.3 车辆预约管理模块2.4 车辆预定管理模块2.5 车辆留言板管理模块2.6 车辆资讯管理模块 三、系统设计3.1 E-R图设计3.2 可行性分析3.2.1 技术可行性分析3.2.2 操作可行性3.2.3 经济…

结构体:子网掩码

#include<iostream> using namespace std; union IP //创建共用体 {unsigned char a[4];unsigned int ip; }; IP getIP() //获取ip函数 {int a, b, c, d;scanf_s("%d.%d.%d.%d", &a, &b, &c, &d);IP address;address.a[3] a; address.a[2] …

Linux lpq命令教程:如何有效地查看打印队列状态(附实例教程和注意事项)

Linux lpq命令介绍 lpq命令是Linux系统中的内置命令&#xff0c;用于列出所有可用打印机的状态。如果在命令行上没有指定打印机或类&#xff0c;则会显示默认目标上排队的作业。interval选项允许你在队列为空之前连续报告队列中的作业&#xff1b;每隔interval秒显示一次作业列…

阿里后端实习二面

阿里后端实习二面 记录面试题目&#xff0c;希望可以帮助到大家 类加载的流程&#xff1f; 类加载分为三个部分&#xff1a;加载、连接、初始化 加载 类的加载主要的职责为将.class文件的二进制字节流读入内存(JDK1.7及之前为JVM内存&#xff0c;JDK1.8及之后为本地内存)&…

计算机网络【EPOLL 源码详解】

IO多路复用 在以前&#xff0c;传统的网络编程是多线程模型&#xff0c;一个线程单独处理一个请求。 然而&#xff0c;线程是很昂贵的资源&#xff1a; 线程的创建和销毁成本很高&#xff0c;linux的线程实际上是特殊的进程&#xff1b;因此通常会使用线程池来减少线程创建和…

5. 数据结构

5. 数据结构 本章详细讨论了你已经学过的一些知识&#xff0c;同样也添加了一些新内容。 5.1. 关于列表更多的内容 Python 的列表数据类型包含更多的方法。这里是所有的列表对象方法&#xff1a; list.append(x) 把一个元素添加到链表的结尾&#xff0c;相当于 a[len(a):]…

已加入git本地版本库的文件如何移除

针对已经加入本地版本库的文件&#xff08;文件颜色为绿色&#xff09;&#xff0c;gitignore是无法进线忽略的&#xff0c;需要先清理git缓存&#xff0c;释放已经加入版本控制的文件&#xff0c;方法如下&#xff1a; 进入文件所在目录&#xff0c;选择文件&#xff0c;右键…

迷宫问题的对比实验研究(代码注释详细、迷宫及路径可视化)

题目描述 对不同的迷宫进行算法问题&#xff0c;广度优先、深度优先、以及人工智能上介绍的一些算法&#xff1a;例如A*算法&#xff0c;蚁群算法等。 基本要求&#xff1a; &#xff08;1&#xff09;从文件读入9*9的迷宫&#xff0c;设置入口和出口&#xff0c;分别采用以上方…

关于WPF MVVM 的详细使用过程以及注意的问题

WPF MVVM 是一种常用的设计模式&#xff0c;在 WPF 应用程序中使用它可以更好地分离界面逻辑和业务逻辑&#xff0c;并且更容易进行单元测试和重构。下面是深入理解 WPF MVVM 的详细使用过程以及注意的问题。 一、MVVM 的基本概念 MVVM 是 Model-View-ViewModel 的缩写&#…

springboot(ssm校园组团平台 高校组团系统 Java系统

springboot(ssm校园组团平台 高校组团系统 Java系统 开发语言&#xff1a;Java 框架&#xff1a;ssm/springboot vue JDK版本&#xff1a;JDK1.8&#xff08;或11&#xff09; 服务器&#xff1a;tomcat 数据库&#xff1a;mysql 5.7&#xff08;或8.0&#xff09; 数据库…

2023年终总结

前言&#xff1a; 嘻嘻&#xff0c;12月底广州降温了又到了写年终总结的时间&#xff0c;这也是我第二年写年终总结。今年的年终总结主要记录了我大三下学期和大四上学期这两个时间段的学习和收获&#xff0c;也是我尝试走出校园&#xff0c;接触社会的第一年&#xff08;感触…

MybatisPlus之常用插件的使用

系列文章目录 提示&#xff1a;这里可以添加系列文章的所有文章的目录&#xff0c;目录需要自己手动添加 MybatisPlus之常用插件的使用 提示&#xff1a;写完文章后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 系列文章目录前言一、插件概…

SpringAMQP的使用方式

MQ介绍 MQ&#xff0c;中文是消息队列&#xff08;MessageQueue&#xff09;&#xff0c;字面来看就是存放消息的队列。也就是事件驱动架构中的Broker。 比较常见的MQ实现&#xff1a; ActiveMQ RabbitMQ RocketMQ Kafka 几种常见MQ的对比&#xff1a; RabbitMQActiveM…

unity随笔- 2D动画制作animation

1.前提&#xff1a;将连续的动作图片制为图集。 2.在Hierarchy中选中含图集的sprites对象。 3.打开animator组件&#xff0c;点击create创建动画组件 4.添加property选择sprite 5.选择图集需要的部分加入animation。&#xff08;animation使用见animator&#xff09;

OSG绘制视锥体(升级版)

OSG绘制视锥体&#xff0c;这一篇增加设置相机参数接口&#xff0c;支持通过eye、center、up设置相机参数。 代码如下&#xff1a; #include "stdafx.h" #include <osgViewer/Viewer> #include <osg/ShapeDrawable> #include <osg/Geode> #includ…