一、业务场景

  一般在项目开发中少不了新增、修改操作,这两个操作中传递的参数中也仅仅只有一个参数是不一致的,新增操作时没有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. 微信小程序-页面跳转数据传递

    在之前的文章当中我们都实现了一个功能就是可以从上一个页面传递数据给下一个页面,那么我们能不能从下一个页面传递数据给上一个页面呢,答案是可以的. 所以说本文这次主要介绍的内容就是返回上一个页面时传递参数 ...

  2. HarmonyOS实战[一]——原理概念介绍安装:基础篇

    [本文正在参与"有奖征文|HarmoneyOS征文大赛"活动] 相关文章: HarmonyOS实战[一]--原理概念介绍安装:基础篇 HarmonyOS实战[二]-超级详细的原子化 ...

  3. Python xlwt数据保存到 Excel中以及xlrd读取excel文件画图

    1.方法一:xlwt 1.1 安装包 pip install xlwt 1.2 保存数据到 Excel import xlwt import numpy as np import random # 新 ...

  4. 基本数据类型(primitive type)

    数据类型 数据类型分为基本数据类型(primitive type)和引用数据类型(reference type) 基本数据类型(primitive type) 数值类型 整数类型 浮点类型 字符类型 ...

  5. JAVA入门学习之GUI编程思想——day01

    GUI编程 什么是GUI???图形化编程 组件 窗口 弹窗 按钮 文本框 图片 事件 ..... GUI的核心:AWT Swing GUI编程的缺陷: ​ 1.界面不美观 ​ 2.需要jre环境 虽然 ...

  6. .NET Core开发实战(第21课:中间件:掌控请求处理过程的关键)--学习笔记(下)

    21 | 中间件:掌控请求处理过程的关键 如果在 Map 的时候逻辑复杂一点,不仅仅判断它的 URL 地址,而且要做特殊的判断的话,可以这么做把判断逻辑变成一个委托 我们要判断当我们的请求地址包含 a ...

  7. Kafka-如何重设消费者位移(重设OFFSET)

    1. 为什么要重设消费者组位移? 我们知道,Kafka 和传统的消息引擎在设计上是有很大区别的,其中一个比较显著的区别就是,Kafka 的消费者读取消息是可以重演的(replayable). 像 Ra ...

  8. 精读JavaScript模式(九),JS类式继承与现代继承模式其二

    壹 ❀ 引 二零一九年的三月二十号,我记录了精读JavaScript模式(八)这篇读书笔记,今天是二零二零年三月十五号,相差五天,其实也算时隔一年,我重新拿起了这本书.当前为什么没继续写下去呢,主要还 ...

  9. NC19782 Tree

    题目链接 题目 题目描述 修修去年种下了一棵树,现在它已经有n个结点了. 修修非常擅长数数,他很快就数出了包含每个点的连通点集的数量. 澜澜也想知道答案,但他不会数数,于是他把问题交给了你. 输入描述 ...

  10. 基于python+mysql的宠物领养网站系统

    功能介绍 平台采用B/S结构,后端采用主流的Python语言进行开发,前端采用主流的Vue.js进行开发. 整个平台包括前台和后台两个部分. 前台功能包括:首页.宠物详情页.用户中心模块. 后台功能包 ...