专业定制网站建设,淘宝网为什么是c2c模式,seo网站优化方,网站建设丿金手指稳定校验对象和校验方法参数都会获取元数据#xff0c;这里的元数据就是上一节所说的内容#xff0c;本章节会讲述怎么根据元数据进行参数校验#xff0c;其实就是根据元数据的MetaConstraint和CascadingMetaData来校验参数值1、hibernate参数校验的入口1.1、校验对象ValidatorI…校验对象和校验方法参数都会获取元数据这里的元数据就是上一节所说的内容本章节会讲述怎么根据元数据进行参数校验其实就是根据元数据的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注解对应的validatorMetaConstraint.validateConstraint这里判断valueExtractionPath是否为空如果不空则说明应用在字段的类型参数上这个时候就需要使用valueExtractionPath来获取当前校验的值valueExtractionPath是一个链表结构会递归获取下一个valueExtractionPath抽取下一层的值直到valueExtractionPath没有后继的valueExtractionPath3.2、Cascadable校验遍历所有Cascadable获取当前值getCascadableValue根据Cascadable是字段、参数、返回值获取当前值不一样这里会递归ContainerCascadingMetaDataContainerCascadingMetaData会把整个字段的参数类型递归存储依次遍历每一层ContainerCascadingMetaData如果当前ContainerCascadingMetaData的cascading是true则校验当前value如果当前ContainerCascadingMetaData有子节点(意思就是说当前节点类型还是参数化类型)则遍历子节点ContainerCascadingMetaData获取对应的ValueExtractorDescriptor抽取子节点的值然后校验子节点的值3、校验方法参数校验方法参数和校验对象类似这里不再细说