一、业务场景

  一般在项目开发中少不了新增、修改操作,这两个操作中传递的参数中也仅仅只有一个参数是不一致的,新增操作时没有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. linux下面权限的含义以及修改

    linux中的权限 前言 数字权限 三位数字权限 读(r) 写(w) 执行(x) 无权限(-) 三位数字权限的转换 如何设置权限 最高位的含义 四位数字权限 SUID SGID SBIT 四位数字权限 ...

  2. Linux命令-tail命令

    Linux命令-tail 命令分析 命令格式 参数 例子 Linux命令-tail 命令分析 tail命令可用于查看文件的内容,通常用来查看日志,加上-f参数就可以查看最新的日志并且不断刷新. 命令格 ...

  3. C/C++ 操作数组与指针笔记

    指针数组: #include <stdio.h> #include <stdlib.h> #include <string.h> void PrintInt() { ...

  4. 每日一道Java面试题:说一说Java中的泛型?

    写在开头 今天的每日一道Java面试题聊的是Java中的泛型,泛型在面试的时候偶尔会被提及,频率不是特别高,但在日后的开发工作中,却是是个高频词汇,因此,我们有必要去认真的学习它. 泛型的定义 什么是 ...

  5. 教你用CSS实现表单部件

    案例介绍 欢迎来到我的小院,我是霍大侠,恭喜你今天又要进步一点点了!我们来用CSS编程实战案例,使用 列表标签完成一个下拉菜单样式的表单部件. 案例演示 运行代码后在浏览器弹出由 标签组成的下拉菜单样 ...

  6. 洛谷P1009 阶乘之和

    捏妈第三节的题单名不是循环结构吗,直接出了第八节的高精度大数计算,紧急学习 对于较大数的加减乘除阶乘等,C/C++原生的数据类型是存储不了的(即便用longlong),直接计算会出现数据移除成负数的结 ...

  7. Linux(CentOS)设置密码永不过期

    Linux服务器有默认的密码修改时间,默认是90天.这种情况下,即使设置过免密登录(互信),当密码到期后,依然需要输入服务器密码. 那么如何设置用户的密码永不过期呢? 一.查看密码过期时间 在root ...

  8. NC20189 [JSOI2011]分特产

    题目链接 题目 题目描述 JYY 带队参加了若干场ACM/ICPC 比赛,带回了许多土特产,要分给实验室的同学们. JYY 想知道,把这些特产分给N 个同学,一共有多少种不同的分法? 当然,JYY 不 ...

  9. NC15479 最短路

    题目链接 题目 题目描述 企鹅国中有 \(N\) 座城市,编号从 \(1\) 到 \(N\) . 对于任意的两座城市 \(i\) 和 \(j\),企鹅们可以花费 \((i\,\,xor\,\, j)* ...

  10. Codeforces Round #824 (Div. 2) A-E

    比赛链接 A 题解 知识点:贪心,数学. 注意到三段工作时间一共 \(n-3\) 天,且天数实际上可以随意分配到任意一段,每段至少有一天,现在目的就是最大化段差最小值. 不妨设 \(l_1<l_ ...