一、业务场景

  一般在项目开发中少不了新增、修改操作,这两个操作中传递的参数中也仅仅只有一个参数是不一致的,新增操作时没有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新项目的更多相关文章

  1. spring @Validated 注解开发中使用group分组校验

    之前知道spring支持JSR校验,在自己定义的bean中加入@NotNull,@NotBlank,@Length等之类的校验用于处理前台传递过来的request请求,避免在写多余的代码去处理. 但是 ...

  2. 新增 修改,对xx名字或者其他属性做校验判断是否存在

    需求描述:页面输入完xxName和xx编码,点击提交,根据两项内容做重复校验(就是看看数据库里有木有相同的) 解决思路:把这两个东西作为查询条件去查,查到有记录,提示已存在,就不执行新增或者修改操作. ...

  3. postgresql使用group by进行数据去重-2022新项目

    一.业务场景 数据去重是web开发中经常会遇到的方式之一,数据库操作中有一个关键字distinct主要就是用来做这件事,用来进行去重. 比如进行统计查询的时候,可以这样写 select count(d ...

  4. 学习Spring Boot:(十)使用hibernate validation完成数据后端校验

    前言 后台数据的校验也是开发中比较注重的一点,用来校验数据的正确性,以免一些非法的数据破坏系统,或者进入数据库,造成数据污染,由于数据检验可能应用到很多层面,所以系统对数据校验要求比较严格且追求可变性 ...

  5. salesforce 零基础学习(六十九)当新增/修改一条记录以后发生了什么(适合初学者)

    salesforce开发中,我们会对object进行很多的操作,比如对object设置字段的必填性唯一性等,设置validation rule实现一下相关的字段的逻辑校验,设置workflow实现某个 ...

  6. 深入了解数据校验:Bean Validation 2.0(JSR380)

    每篇一句 > 吾皇一日不退役,尔等都是臣子 对Spring感兴趣可扫码加入wx群:`Java高工.架构师3群`(文末有二维码) 前言 前几篇文章在讲Spring的数据绑定的时候,多次提到过数据校 ...

  7. SpringBoot Validation参数校验 详解自定义注解规则和分组校验

    前言 Hibernate Validator 是 Bean Validation 的参考实现 .Hibernate Validator 提供了 JSR 303 规范中所有内置 constraint 的 ...

  8. springboot使用validation 插件做数据校验

    不多说废话. 首先,我们需要在入参实体对象中,使用注解,控制 @Datapublic class UpdateShufflingRequest { private String shuffling_l ...

  9. 使用spring validation完成数据后端校验

    前言 数据的校验是交互式网站一个不可或缺的功能,前端的js校验可以涵盖大部分的校验职责,如用户名唯一性,生日格式,邮箱格式校验等等常用的校验.但是为了避免用户绕过浏览器,使用http工具直接向后端请求 ...

  10. 使用spring validation完成数据后端校验-自定义校验的注解-判断是否为空

    引入依赖 我们使用maven构建springboot应用来进行demo演示. <dependencies> <dependency> <groupId>org.sp ...

随机推荐

  1. tensorflow语法【zip、tf.tile、tf.truncated_normal、tf.data.Dataset.from_tensor_slices、dataset中shuffle()】

    相关文章: [一]tensorflow安装.常用python镜像源.tensorflow 深度学习强化学习教学 [二]tensorflow调试报错.tensorflow 深度学习强化学习教学 [三]t ...

  2. 【一】LaTeX的安装和使用、安装TeXstudio、中文界面输出设置

    安装方法一:(推荐) 下载链接·:http://tug.org/texlive/acquire-netinstall.html 下载zip,然后运行Windows批处理脚本(install-tl-wi ...

  3. ElasticSearch7.3学习(十八)----多索引搜索

    1.multi-index 多索引搜索 多索引搜索就是一次性搜索多个index下的数据 /_search:所有索引下的所有数据都搜索出来 /index1/_search:指定一个index,搜索其下所 ...

  4. 洛谷P1102 过河卒

    P1102 过河卒 链接在此 过河卒 此题如果直接忽略掉马的影响的话,可以看出很简单的递推规律 即 \[dp[i][j]=dp[i-1][j]+dp[i][]j-1] \] 也就是说,由于卒只能走直线 ...

  5. 针对SpringBoot服务端返回的空对象和空数组问题

    返回的Json会自动过滤掉空指针的对象,但是若遇到非空指针的没有任何内容的对象,举例如下: public class Person { private String name; private Int ...

  6. ASP.NET Core分布式项目实战(客户端集成IdentityServer)--学习笔记

    任务9:客户端集成IdentityServer 新建 API 项目 dotnet new webapi --name ClientCredentialApi 控制器添加验证 using Microso ...

  7. Linux-nmon系统监控工具

    一.Nmon介绍 Nmon得名于 Nigel 的监控器,是IBM的员工 Nigel Griffiths 为 AIX 和 Linux 系统开发的,使用 Nmon 可以很轻松的监控系统的 CPU.内存.网 ...

  8. Python-pymysql查询MySQL的表

    一.安装pymysql py -m pip install pymysql; 二.创建表并插入数据 CREATE TABLE `course` ( `course_id` varchar(10) DE ...

  9. Elasticsearch不同集群间备份恢复(S3存储)

    S3存储 首先都知道需要在ES集群上安装S3插件以及重启集群 在MINIO集群创建相应的桶 Kibana上注册快照存储库,两个不同的集群需要对接到同一个S3存储库,对接后会自动识别桶里的快照 < ...

  10. 旁门左道:借助 HttpClientHandler 拦截请求,体验 Semantic Kernel 插件

    前天尝试通过 one-api + dashscope(阿里云灵积) + qwen(通义千问)运行 Semantic Kernel 插件(Plugin) ,结果尝试失败,详见前天的博文. 今天换一种方式 ...