news 2026/4/18 1:40:50

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/4/18 2:06:29

《机器学习导论》第 7 章-聚类

目录 前言 7.1 引言 聚类的应用场景 核心概念对比(可视化) 运行效果 7.2 混合密度 核心思想 实战代码(混合密度可视化) 运行效果 7.3 k 均值聚类 核心步骤 实战代码(k 均值聚类 效果对比) 关…

作者头像 李华
网站建设 2026/4/18 2:05:10

全球业务(1)新加坡支付费率和支付平台—东方仙盟

一、本地支付核心信息表 表格 支付方式手续费(2026)接入网址接入要求PayNow/NETS0.65%-1.0% S$0.30https://www.abs.org.sg/paynowhttps://www.nets.com.sg1. 新加坡公司 UEN2. 本地银行账户3. 完成 KYC/AML4. 接入 SGQR会员余额扣(持牌 A…

作者头像 李华
网站建设 2026/4/18 2:05:28

一键复制!让你的拜年话“马上”不一样

还在重复“新年快乐,万事如意”吗?马年拜年,就该用上“马”的成语和巧思,让你的祝福瞬间脱颖而出!下面为你准备好了一系列“马上”就能用的祝福语,分为直接复制区和个性定制区,分对象、分场合&a…

作者头像 李华
网站建设 2026/4/18 1:05:17

数据仓库建设中的测试方法与质量保障

数据仓库建设中的测试方法与质量保障 关键词:数据仓库、测试方法、质量保障、数据准确性、数据完整性 摘要:本文主要围绕数据仓库建设中的测试方法与质量保障展开。首先介绍了数据仓库建设测试的背景和相关概念,接着详细解释了核心概念&#…

作者头像 李华
网站建设 2026/4/18 2:05:30

AI应用架构师实战:智能虚拟互动系统架构设计调优

AI应用架构师实战:智能虚拟互动系统架构设计调优 ——打造身临其境的交互体验 摘要/引言 问题陈述 随着人工智能技术的飞速发展,智能虚拟互动系统在众多领域得到了广泛应用,如虚拟客服、游戏角色互动、教育辅助等。然而,设计一个高…

作者头像 李华
网站建设 2026/4/18 2:02:26

随便学学-py集合+py算法基础

py算法基础常用输入第一行输入数字个数n,第二行输入n个数字n int(input()) # 第一行:数字个数 arr list(map(int, input().split())) # 第二行:n个数字输入三个数字a, b, c map(int, input().split()) # 一行3个数字二维数组n, m map(…

作者头像 李华