文章目录

  • Pre
  • 需求
  • 实现三部曲
    • Step1 定义分组接口
    • Step2 给参数分配分组
    • Step3 指定分组
    • Step4 验证
  • 源码


Pre

SpringBoot - 优雅的实现【参数校验】高级进阶

SpringBoot - 优雅的实现【自定义参数校验】高级进阶

SpringBoot - 优雅的实现【参数分组校验】高级进阶


需求

我们经常会碰到这样的一个场景: 新增的时候某些字段为必填(比如密码), 更新的时候非必填。


实现三部曲

Validator校验框架提供了分组校验,可以帮助我们快速的实现这样的需求。

Step1 定义分组接口


import javax.validation.groups.Default;/*** @author 小工匠* @version 1.0* @description: TODO* @date 2022/2/21 23:03* @mark: show me the code , change the world*/public interface CustomValidateGroup extends Default {interface Crud extends CustomValidateGroup {interface Create extends Crud {}interface Update extends Crud {}interface Query extends Crud {}interface Delete extends Crud {}}
}

定义一个分组接口CustomValidateGroup 让其继承javax.validation.groups.Default,再在分组接口中定义出多个不同的操作类型,Create,Update,Query,Delete.


Step2 给参数分配分组

    @Length(min = 8, max = 12, message = "password长度必须位于8到12之间")@NotNull(groups = CustomValidateGroup.Crud.Create.class,message = "新增接口密码不能为空")@Null(groups = CustomValidateGroup.Crud.Update.class)private String password;

Step3 指定分组

给需要参数校验的方法指定分组

    /***  新增的时候 不能为空* @param artisan* @return*/@PostMapping(value = "/add")public String add(@Validated(value = CustomValidateGroup.Crud.Create.class) Artisan artisan){log.info("InComing Param is {}", artisan);return "add valid success";}/*** 更新的时候 可以为空* @param artisan* @return*/@PostMapping(value = "/update")public String update(@Validated(value = CustomValidateGroup.Crud.Update.class) Artisan artisan){log.info("InComing Param is {}", artisan);return "update valid success";}

通过value属性给add()和update()方法分别指定Create和Update分组


Step4 验证

新增,期望 密码不能为空 ,我们填个空试试

【修改】

对于未指定分组的则使用的是默认分组 。 比如由于email属于默认分组,而我们的分组接口CustomValidateGroup已经继承了Default分组,所以也是可以对email字段作参数校验的

如果CustomValidateGroup没有继承Default分组,那在代码属性上就需要加上@Validated(value = {ValidGroup.Crud.Create.class, Default.class}才能让email字段的校验生效。


源码

https://github.com/yangshangwei/boot2

SpringBoot - 优雅的实现【参数分组校验】高级进阶相关推荐

  1. java分组校验_SpringBoot @Validated注解实现参数分组校验的方法实例

    前言 在前后端分离开发的时候我们需要用到参数校验,前端需要进行参数校验,后端接口同样的也需要,以防传入不合法的数据. 1.首先还是先导包,导入pom文件. org.springframework.bo ...

  2. SpringBoot - 优雅的实现【业务校验】高级进阶

    文章目录 Pre 需求 实现三部曲 实体类 Step1 搞两个自定义注解 Step2 搞自定义校验器 Step3 搞验证 小结 源码 Pre SpringBoot - 优雅的实现[参数校验]高级进阶 ...

  3. AspectJ切面自定义注解实现参数分组校验——基础概念(2)

    AspectJ切面自定义注解实现参数分组校验--基础概念(2) 一.环境 二.创建AspectJ 2-1.基础概念 2-2.Pointcut规则表达式 2-3.切点标志符pointcut design ...

  4. SpringBoot - 优雅的实现【自定义参数校验】高级进阶

    文章目录 Pre 概述 三部曲 Step1 搞自定义注解 Step2 搞校验逻辑 Step3 使用 Step4 验证 附 int 类型的判断 源码 Pre SpringBoot - 优雅的实现[参数校 ...

  5. SpringBoot - 优雅的实现【参数校验】高级进阶

    文章目录 Pre 概述 参数校验三部曲 Step1 搞依赖 Step2 搞参数校验的实体类 常用的校验注解 Step3 开始验证 存在的问题 使用 统一格式 + 全局异常Handler 优化 源码 P ...

  6. element form自定义校验_SpringBoot分组校验及自定义校验注解

    前言   在日常的开发中,参数校验是非常重要的一个环节,严格参数校验会减少很多出bug的概率,增加接口的安全性.在此之前写过一篇SpringBoot统一参数校验主要介绍了一些简单的校验方法.而这篇则是 ...

  7. Springboot优雅的参数校验(一)

    目录 前言 1. 依赖引入 2. 参数形式 3. 常用到的约束注解 4. 参数基础校验 4.1 @RequestBody参数 4.2 @RequestParam参数/@PathVariable参数 4 ...

  8. springboot 优雅的参数校验_SpringBoot 2.x 开发案例之优雅的校验参数

    前言 参数如何校验?撸主很久很久之前的项目都是在前端页面一个个 if else 的,后来就用了一系列的前端校验框架,比如 layui iview 等等,几个样式属性就可以轻松搞定,的确是美滋滋. 后端 ...

  9. SpringBoot 优雅的参数效验!

    引言 不知道大家平时的业务开发过程中 controller 层的参数校验都是怎么写的?是否也存在下面这样的直接判断? public String add(UserVO userVO) {if(user ...

最新文章

  1. 阿里云自营建站买一年送一年
  2. Python:利用collections库实现统计单个字或单个字母的频率统计并进行降序输出、统计一个列表内重复元素并以字典形式输出
  3. android cmd
  4. 高精度(压位+判负数+加减乘+读写)
  5. Python学习笔记——元组
  6. 小米 11 不送充电器;苹果已修复 iCloud 登录激活问题;Ruby 3.0.0 发布|极客头条...
  7. idea jstl需要导包吗_1,IDEA-安装及全局配置
  8. vue 引入自定义js方法并调用
  9. 002649:springboot下mybatis运行原理
  10. Oracle常见索引扫描方式总结
  11. 风控建模二、特征工程---通用
  12. 51单片机汇编语言例子,涵盖数码管显示,流水灯,串口,外拓,电子钟,频率计,DA、AD转换等实例
  13. 网友上海求职指南2007
  14. 联想2015年冲进全球PC服务器前三甲
  15. latex大括号 多行公式_怎样在word中快速输入复杂的公式(在线识别数学、物理或化学公式)?...
  16. android平板2018,2018 Android平板电脑推荐三星或华为更好
  17. 关于计算机作文的结束语,关于行动的作文结尾
  18. 快速中值滤波在心电图ECG中的应用
  19. linux 无法创建文件,无法创建文件系统以及无法创建PV时怎么办?
  20. 包裹动态称重扫码测体积快手台DWS的开发和源码

热门文章

  1. 华为魔术手机拆机图解_【连载二十二】手机维修电路基础卡电路
  2. 怎样在计算机上插入机构图,Win7系统如何在excel中添加word文档结构图?
  3. php 调用 perl,在PHP中使用与Perl兼容的正则表达式
  4. python 1 2 3怎么拼接所有可能的数_6000字长文,带你用Python完成 “Excel合并(拆分)” 的各种操作!...
  5. 4che3 scu发送超时设置_Redis实现订阅发布与批量发送短信
  6. js动态载入css文件,原生JS动态加载JS、CSS文件及代码脚本(示例代码)
  7. dao接口有什么好处_Java后端精选技术:我们为什么要使用AOP?
  8. NLP-基础知识-007(机器学习-朴素贝叶斯)
  9. 重温强化学习之深度强化学习
  10. 可视化应用实战案例:绘制交互式+pdf+png等多格式桑基图