一、业务场景

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

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

  2. 环境调试bug【二】无法加载源“<string>”: Source unavailable

    1.无法加载源"<string>": Source unavailable. 网上解决方法: 总结来说就两种: debugStdLib: true 添加到 launch ...

  3. nginx入门之基础配置

    1.配置文件 nginx 的配置文件是 /etc/nginx/nginx.conf,其目录结构大致为: main #全局配置,对全局生效 events { #nginx工作模式配置,配置影响 Ngin ...

  4. vue-cli3创建多页面应用

    首先用vue-cli3创建工程,我的全局安装了vue-cli2,又不想卸载掉:所以新建了一个文件夹安装vue-cli3:然后在该文件夹下创建工程: 同时安装vue-cli2和vue-cli3参考:ht ...

  5. 自定义RecyclerView下拉刷新上拉加载更多

    自定义ListView下拉刷新上拉加载更多 自定义RecyclerView下拉刷新上拉加载更多

  6. 使用SecureCRT的按钮实现快速查询

    背景:有这么个日常运维场景,客户因管理需求,不允许在服务器上部署任何自动化的脚本,需要人工登录到机器上查询ASM磁盘组的使用率情况,有上百套环境. 使用的工具是SecureCRT,如何提升一些效率呢? ...

  7. VMware16.0-16.1.2去虚拟化过SE检测教程小白专享

    这里是VM16.0-16.1.2的修改教程 以下所需要的工具百度一下就可以了 winhex硬件修改器 bios修改器 安装过程就不多做介绍吧,直接进入修改过程,还不会的小伙伴搜一下百度自行安装即可 安 ...

  8. 从零开始的react入门教程(二),从react组件说到props/state的联系与区别

    壹 ❀ 引 在从零开始的react入门教程(一)一文中,我们搭建了第一个属于自己的react应用,并简单学习了jsx语法.jsx写法上与dom标签高度一致,当然我们也知道,本质上这些react元素都是 ...

  9. NEMU PA 2-1 实验报告

    课程地址:https://www.bilibili.com/video/BV1TE411P7tq 一.实验目的 通过PA2-0了解了汇编基础知识和如何去阅读i386手册后,在这个阶段我们就需要: 了解 ...

  10. OCR 01: EasyOCR

    Catalog OCR 01: EasyOCR OCR 02: Tesseract-OCR OCR 03: PaddleOCR Related Links Official site with onl ...