当前位置: 首页 > news >正文

Springboot @Validate @Valid 基于复杂嵌套对象的参数校验示例

Springboot @Validate @Valid 基于复杂嵌套对象的参数校验示例

复杂对象

@Data
public class Object1 {@Length(max = 50,message = "长度不能超过50位字符")@NotBlank(message = "名称不能为空")private String name;@NotNull(message = "不能为空")private Integer grade;@NotNull(message = "计分展示不能为空")private Integer scoreDimension;@NotNull(message = "obj2s不能为空")@Validprivate List<Object2> obj2s;
}@Data
public class Object2{@Length(max = 50, message = "长度不能超过50位字符")@NotBlank(message = "分类名称不能为空")private String categoryName;@Validprivate List<Object3> obj3s;
}@Data
public class Object3{@NotNull(message = "分值不能为空")@Max(value =1000 , message = "分值最大不能超过1000")private Integer score;@Size(max = 500, message = "最多可输入500个字符")private String standards;@Size(max = 10, message = "标最多10条")private String[] urls;@NotNull(message = "不能为空")private Integer[] rating;
}//controller校验@PostMapping("/check")public Result<Void> check( @Validated @RequestBody Object1 obj1) {return servei1.check(obj1);}

说明:

  • @Validated 和@Valid的区别:
    • @Validated : 用在类、方法和方法参数上,但不能用于成员属性。
    • @Valid:可以用在方法、构造函数、方法参数和成员属性上。
    • @Validated :支持分组验证,可以更细致地控制验证过程。此外,由于它是Spring专有的,因此可以更好地与Spring的其他功能(如Spring的依赖注入)集成。
    • @Valid:主要支持标准的Bean验证功能,不支持分组验证。
    • @Validated :不支持嵌套验证。
    • @Valid:支持嵌套验证,可以嵌套验证对象内部的属性。
  • @Size和@Length的区别:
    • 两者都是限制字符串长度的;@Size更为通用。
    • @Size注解更为通用,‌可以应用于字符串和集合字段,‌使用min和max参数指定长度范围。‌这意味着它可以用于多种数据类型,‌包括字符串、‌集合和数组,‌对于字符串可以校验长度,‌对于集合和数组可以校验大小
    • @Length注解仅适用于字符串字段,‌使用length参数指定具体长度。‌它专门用于校验字符串的长度;

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • SQL 基础知识
  • Springboot 多数据源事务
  • 代码随想录算法训练营day22 | 77. 组合、216.组合总和III 、17.电话号码的字母组合
  • kettle从入门到精通 第八十一课 ETL之kettle kettle中的json对象字段写入postgresql中的json字段正确姿势
  • CTF之网站被黑
  • Unity 之 【Android Unity 共享纹理】之 Android 共享图片给 Unity 显示
  • 大厂面经:滴滴大数据面试题及参考答案(3万字长文)
  • 返回倒数第 k 个节点 - 力扣(LeetCode)C语言
  • 记录|博图中VB脚本和子程序之间的区别?
  • 原生JavaScript系列面试题
  • MyBatis-Plus的基本使用(一)
  • uni-app pinia搭建
  • Vue3开源Tree组件研发:节点勾选支持v-model
  • 防火墙——SNAT和DNAT策略的原理及应用、防火墙规则的备份、还原和抓包
  • python基础---1.变量、运算符和表达式、基本数据结构
  • 【翻译】babel对TC39装饰器草案的实现
  • Flex布局到底解决了什么问题
  • Java,console输出实时的转向GUI textbox
  • MaxCompute访问TableStore(OTS) 数据
  • PAT A1017 优先队列
  • Traffic-Sign Detection and Classification in the Wild 论文笔记
  • 关于字符编码你应该知道的事情
  • 力扣(LeetCode)357
  • 驱动程序原理
  • 要让cordova项目适配iphoneX + ios11.4,总共要几步?三步
  • #知识分享#笔记#学习方法
  • (ISPRS,2023)深度语义-视觉对齐用于zero-shot遥感图像场景分类
  • (差分)胡桃爱原石
  • (代码示例)使用setTimeout来延迟加载JS脚本文件
  • (读书笔记)Javascript高级程序设计---ECMAScript基础
  • (附源码)spring boot校园拼车微信小程序 毕业设计 091617
  • (机器学习-深度学习快速入门)第一章第一节:Python环境和数据分析
  • (经验分享)作为一名普通本科计算机专业学生,我大学四年到底走了多少弯路
  • (亲测有效)解决windows11无法使用1500000波特率的问题
  • (区间dp) (经典例题) 石子合并
  • (三)Pytorch快速搭建卷积神经网络模型实现手写数字识别(代码+详细注解)
  • (十八)SpringBoot之发送QQ邮件
  • (十六)视图变换 正交投影 透视投影
  • (学习日记)2024.03.12:UCOSIII第十四节:时基列表
  • (学习日记)2024.03.25:UCOSIII第二十二节:系统启动流程详解
  • (一)utf8mb4_general_ci 和 utf8mb4_unicode_ci 适用排序和比较规则场景
  • (转)iOS字体
  • (转)关于多人操作数据的处理策略
  • .aanva
  • .NET CF命令行调试器MDbg入门(一)
  • .net SqlSugarHelper
  • .NET关于 跳过SSL中遇到的问题
  • .sh
  • /run/containerd/containerd.sock connect: connection refused
  • @antv/x6 利用interacting方法来设置禁止结点移动的方法实现。
  • @RequestMapping-占位符映射
  • [【JSON2WEB】 13 基于REST2SQL 和 Amis 的 SQL 查询分析器
  • [ActionScript][AS3]小小笔记
  • [Android]使用Git将项目提交到GitHub
  • [C++] new和delete