news 2026/8/4 14:42:39

Hibernate-Validate参数校验之校验参数值

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Hibernate-Validate参数校验之校验参数值

校验对象和校验方法参数都会获取元数据,这里的元数据就是上一节所说的内容,本章节会讲述怎么根据元数据进行参数校验,其实就是根据元数据的MetaConstraint和CascadingMetaData来校验参数值

1、hibernate参数校验的入口

1.1、校验对象

ValidatorImpl的validate方法

1.2、校验方法参数

2、校验对象

3.1、MetaConstraint校验

  • 遍历分组参数,针对每个分组进行校验MetaConstraint

  • 判断当前分组是否是Default分组,因为Default分组缓存了MetaConstraint,如果是Default分组直接可以获取缓存的MetaConstraint,否则需要遍历所有的MetaConstraint,然后判断MetaConstraint是否是当前分组

  • 遍历MetaConstraint校验

  • MetaConstraint校验,需要获取当前字段值,然后校验当前字段值

  • 获取当前字段值是通过valueContext.getValue,这里通过location反射获取字段的值

  • 如果location是FieldConstraintLocation,则通过反射获取字段的值

  • 如果location是TypeArgumentConstraintLocation,则通过最外层的FieldConstraintLocation反射获取字段的值

  • MetaConstraint.validateConstraint,这里判断valueExtractionPath是否为空,如果是空则说明应用在字段上,直接使用validator验证,这里的validator就是校验注解对应的validator,例如@NotEmpty注解对应的validator

  • MetaConstraint.validateConstraint,这里判断valueExtractionPath是否为空,如果不空则说明应用在字段的类型参数上,这个时候就需要使用valueExtractionPath来获取当前校验的值,valueExtractionPath是一个链表结构,会递归获取下一个valueExtractionPath抽取下一层的值,直到valueExtractionPath没有后继的valueExtractionPath

3.2、Cascadable校验

  • 遍历所有Cascadable
  • 获取当前值,getCascadableValue根据Cascadable是字段、参数、返回值获取当前值不一样

  • 这里会递归ContainerCascadingMetaData,ContainerCascadingMetaData会把整个字段的参数类型递归存储,依次遍历每一层ContainerCascadingMetaData
  • 如果当前ContainerCascadingMetaData的cascading是true,则校验当前value;
  • 如果当前ContainerCascadingMetaData有子节点(意思就是说当前节点类型还是参数化类型),则遍历子节点ContainerCascadingMetaData,获取对应的ValueExtractorDescriptor,抽取子节点的值,然后校验子节点的值

3、校验方法参数

校验方法参数和校验对象类似,这里不再细说

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/31 10:15:45

2026年琼海必打卡的8大特色海鲜餐厅推荐

在琼海,海鲜与川湘风味的结合为食客带来了独特的美食体验。本文将介绍2026年不可错过的琼海特色餐厅,让你尽情享受海南地方菜的魅力。这些餐厅提供新鲜美味的海鲜,其中琼海辣炒海鲜更是深受喜爱。每家餐厅都有各自的特点和招牌菜,…

作者头像 李华
网站建设 2026/8/4 13:32:18

conda使用指南

内容来自尚硅谷 Conda使用指南1. Conda 基本介绍 1.1 什么是 Conda、MiniConda、AnacondaConda是一个包和环境管理的工具。支持 Windows、macOS和 Linux。Conda可以快速的安装、运行和更新包和相关的依赖。Conda也可以轻易地创建、保存、加载和转换环境。 Anaconda是一个用于科…

作者头像 李华
网站建设 2026/7/30 15:09:49

19岁嫁豪门,20岁离婚带儿子净身出户,单亲40年如今儿子为她争气

1958年的香港,19岁的林淑芬穿着租来的婚纱站在教堂彩窗前,钻石项链在颈间泛着冷光。这场豪门婚姻像一场绚丽的烟火,在众人艳羡中绽放,又在一年后骤然熄灭。当她抱着襁褓中的儿子走出半山别墅时,晨雾打湿了旗袍下摆&…

作者头像 李华
网站建设 2026/8/1 21:57:35

GLM-ASR-Nano-2512企业级:日均10万条语音处理的稳定性验证

GLM-ASR-Nano-2512企业级:日均10万条语音处理的稳定性验证 1. 为什么企业需要真正扛得住的语音识别服务 你有没有遇到过这样的情况:客服系统突然涌入大量用户语音,转文字服务开始卡顿、延迟飙升,甚至直接返回空白结果&#xff1…

作者头像 李华
网站建设 2026/7/31 14:27:36

为什么AI超分需要持久化?系统盘存储防丢失实战解析

为什么AI超分需要持久化?系统盘存储防丢失实战解析 1. AI超分不是“放大镜”,而是“像素重建师” 很多人第一次接触AI图像超分辨率(Super Resolution),下意识会把它当成一个高级版的“图片放大工具”——点一下&…

作者头像 李华