新增、修改校验逻辑使用-Validation-的group分组校验完成-2022新项目
一、业务场景
一般在项目开发中少不了新增、修改操作,这两个操作中传递的参数中也仅仅只有一个参数是不一致的,新增操作时没有ID,
修改时有ID,其校验逻辑也只有这一个ID校验的差别。最开始自己在写代码时,按照项目中已有的示例,新增操作单独写一个输入类,
这样便于校验新增操作时输入的参数。修改操作时也单独写一个输入类,让这个类继承新增操作输入类,然后只添加一个ID,在单独
校验这个ID即可。其他操作都一样,比如将输入类InVO转换为DTO,还有自定义的复杂校验逻辑等等。最开始的时候自己也在考虑
能不能只写一个输入类,让新增操作和修改操作都可以同时使用这一个输入类,这样会更加的简便。按照这种方式,在修改方法中会
多一段校验ID的代码,看着不优雅,因为没有采用这种方式。
二、需求分析
苦于自己一直没有找到适合的校验方式来解决这个问题,直到某一次看到一篇博文,主要讲的是Validation 框架中的分组校验,一看
这种方式可以解决自己之前遇到的问题,很是开心。简单点说就是同一个类中,可以对同一个字段进行不同的校验,这样在一个输入类中,
新增操作时不校验ID,修改操作时校验ID就可以很好的解决这个问题。
三、解决方案
自己抱着试一试的心态开始尝试,先创建一个简单的接口 UpdateValiduateInterface,输入参数只写一个,在这个输入参数的ID字段
上写上如下代码:
@NotNull(message = "ID不能为null!",groups = UpdateValiduateInterface.class)
private Long id;
新增方法中的写法如下:
createUser(@RequestBody @Validated User user))
修改方法中的写法如下:
updateUser(@RequestBody @Validated({Default.class, UpdateValiduateInterface.class}) User user))
这样在新增操作时使用默认的校验规则,不需要添加多余的参数;而在修改操作时,多加一个修改校验的分组参数即可。
经测试,这种方式完全可行。有更好校验方式的小伙伴欢迎在评论区留言交流。
小提示:为了防止恶意传参,自己在新增方法中加了一行代码 user.setId(null); 避免有人搞破坏在新增操作中传入一个ID
导致后续的处理出现问题。
新增、修改校验逻辑使用-Validation-的group分组校验完成-2022新项目的更多相关文章
- spring @Validated 注解开发中使用group分组校验
之前知道spring支持JSR校验,在自己定义的bean中加入@NotNull,@NotBlank,@Length等之类的校验用于处理前台传递过来的request请求,避免在写多余的代码去处理. 但是 ...
- 新增 修改,对xx名字或者其他属性做校验判断是否存在
需求描述:页面输入完xxName和xx编码,点击提交,根据两项内容做重复校验(就是看看数据库里有木有相同的) 解决思路:把这两个东西作为查询条件去查,查到有记录,提示已存在,就不执行新增或者修改操作. ...
- postgresql使用group by进行数据去重-2022新项目
一.业务场景 数据去重是web开发中经常会遇到的方式之一,数据库操作中有一个关键字distinct主要就是用来做这件事,用来进行去重. 比如进行统计查询的时候,可以这样写 select count(d ...
- 学习Spring Boot:(十)使用hibernate validation完成数据后端校验
前言 后台数据的校验也是开发中比较注重的一点,用来校验数据的正确性,以免一些非法的数据破坏系统,或者进入数据库,造成数据污染,由于数据检验可能应用到很多层面,所以系统对数据校验要求比较严格且追求可变性 ...
- salesforce 零基础学习(六十九)当新增/修改一条记录以后发生了什么(适合初学者)
salesforce开发中,我们会对object进行很多的操作,比如对object设置字段的必填性唯一性等,设置validation rule实现一下相关的字段的逻辑校验,设置workflow实现某个 ...
- 深入了解数据校验:Bean Validation 2.0(JSR380)
每篇一句 > 吾皇一日不退役,尔等都是臣子 对Spring感兴趣可扫码加入wx群:`Java高工.架构师3群`(文末有二维码) 前言 前几篇文章在讲Spring的数据绑定的时候,多次提到过数据校 ...
- SpringBoot Validation参数校验 详解自定义注解规则和分组校验
前言 Hibernate Validator 是 Bean Validation 的参考实现 .Hibernate Validator 提供了 JSR 303 规范中所有内置 constraint 的 ...
- springboot使用validation 插件做数据校验
不多说废话. 首先,我们需要在入参实体对象中,使用注解,控制 @Datapublic class UpdateShufflingRequest { private String shuffling_l ...
- 使用spring validation完成数据后端校验
前言 数据的校验是交互式网站一个不可或缺的功能,前端的js校验可以涵盖大部分的校验职责,如用户名唯一性,生日格式,邮箱格式校验等等常用的校验.但是为了避免用户绕过浏览器,使用http工具直接向后端请求 ...
- 使用spring validation完成数据后端校验-自定义校验的注解-判断是否为空
引入依赖 我们使用maven构建springboot应用来进行demo演示. <dependencies> <dependency> <groupId>org.sp ...
随机推荐
- 20.6 OpenSSL 套接字分发RSA公钥
通过上一节的学习读者应该能够更好的理解RSA加密算法在套接字传输中的使用技巧,但上述代码其实并不算完美的,因为我们的公钥和私钥都必须存储在本地文本中且公钥与私钥是固定的无法做到更好的保护效果,而一旦公 ...
- Volatility 内存数字取证方法
计算机数字取证分为内存取证和磁盘取证,活取证与死取证,不管是那种取证方式,都应尽量避免破环犯罪现场,例如通过内存转储工具对内存进行快照,通过磁盘克隆工具对磁盘进行克隆,方便后期的分析工作,这里将研究内 ...
- BoostAsyncSocket 异步反弹通信案例
Boost 利用ASIO框架实现一个跨平台的反向远控程序,该远控支持保存套接字,当有套接字连入时,自动存储到map容器,当客户下线时自动从map容器中移除,当我们需要与特定客户端通信时,只需要指定客户 ...
- 【Python】一篇拿下类属性与类方法详解【超详细的注释和解释】
文章目录 前言 类的实例化 类的非静态属性或方法(实例属性和方法) 类的静态属性和方法 静态属性(静态成员变量) 静态方法 类方法(静态成员函数) 总结 属性的访问权限 尾声 前言 先赞后看好习惯 打 ...
- Leetcode刷题第四天-双指针-二分法
15:三个数之和 链接:15. 三数之和 - 力扣(LeetCode) em...双冲for循环,从头去遍历,0-(a+b)是否在列表中,最终timeout 数组从小到大排序,设置三个指针,i从头遍历 ...
- 痞子衡嵌入式:我入选了2023年度与非网(eefocus)最佳创作者Top15
最近收到了「与非网」发来的 2023 年度最佳创作者 证书,证书做得一如既往地有质感,这是与非网第二次给痞子衡发证书了,足见与非网对痞子衡的认可. 与非网自 2021 年起,每年都会评选一次年度创作者 ...
- Typora Mac中文破解版获取
作为程序员,markdown是非常好用的文本编辑语言,而Typora是非常好用的一款markdown编辑工具.Typora提供读者和作家的无缝体验.它删除了预览窗口,模式切换器,降低源代码的语法符号以 ...
- Python Rich:美化终端显示效果
Rich库的功能就像它的名字一样,使Python编程更加丰富(rich),它帮助开发者在控制台(命令行)输出中创建丰富.多彩和具有格式化的文本. 本篇总结了如何使用Rich库让我们的命令行工具更加美观 ...
- BZOJ3364 Distance Queries 距离咨询 题解
原题 简化题意:有一棵 \(n\) 个点的树, \(q\) 组询问,每次询问回答两点间的距离. 令 \(dis[i][j]\) 表示 \(i\) 到 \(j\) 的距离,根节点为 \(rt\) ,则有 ...
- 【Android】使用 MediaMetadataRetriever 获取视频信息
1 环境配置与初始化 (1)申请权限 在 AndroidManifest.xml 中的 manifest 标签(application 同级标签)下添加外部存储读写权限,如下: <use ...