死磕Spring Boot Validation校验
一、基本介绍SpringBoot提供了方便的validation主要对输入数据进行校验确保数据符合预期规则是保证应用健壮性的重要手段1、Bean Validation基于 JSR-380 (Bean Validation 2.0) 规范、2、Hibernate Validator最流行的实现3、Spring 集成通过 Valid 或 Validated 注解触发验证怎么使用就不介绍了包含如何自定义注解进行校验分组验证处理验证错误二、javax.validation这里项目jdk为1.8所使用的包名为javax.validation之后的版本变更为jakarta.validation这个包为Jakarta EE平台的基础核心包之一提供验证bean标准的API,总入口为Validation类作为标准的api需要暴露接口供其他包进行接入接口为ValidationProviderValidationProvider通过ValidationProviderResolver进行处理除此之外javax.validation提供了默认的处理器DefaultValidationProviderResolver会通过SPI机制ServiceLoader加载META-INF/services/如果未加载到则会抛出异常否则会取第一个ValidationProvider最终通过configure生成javax.validation.ConfigurationConfiguration也提供了非常多的接口层定义需要实现buildValidatorFactory再通过ValidatorFactory.getValidator进行校验javax.validation提供了一些基础的校验注解具体校验规则也需要单独实现三、hibernate实现首先在META-INF/services目录下申明javax.validation.spi.ValidationProvider为org.hibernate.validator.HibernateValidatorHibernateValidator生成的configuration为HibernateValidatorConfigurationValidatorFactory的实现为ValidatorFactoryImpl其中含有几个重要的属性1、ConstraintValidatorFactory负责ConstraintValidator的创建和生命周期通过工厂获取某个校验的ConstraintValidator实例如果是spring项目使用的是SpringConstraintValidatorFactory有springframework负责实现2、校验逻辑直到开始校验时才会执行Validator.validate方法这里以分组校验对象为例Validator也提供了很多种灵活的校验包括校验单独的某个属性其中BeanMetaData主要通过AnnotationMetaDataProvoder进行注解的元数据获取主要思路为根据constraintHelper.isConstraintAnnotation是否当前类含有校验属性的注解Constraint.class因为基本上每个校验注解里面都有Constraint如果没有任何约束条件则会直接结束同时BeanMetaData进行了缓存下一次校验同类型的时候直接从缓存获取metaData紧接着会对校验的组进行排序每次校验可以支持单个或者多个如果未指定默认是javax.validation.groups.Default最后会执行validateInContext进行校验其中短路验证shouldFailFast是hibernate专有的如果开启了这个属性遇到验证失败的则会直接结束不再往下执行这里就会用到提供的接口所有实现ConstraintValidator调用isValid方法

相关新闻

SpringCache缓存介绍

SpringCache缓存介绍

SpringCache注解 在SpringCache中提供了很多缓存操作的注解,常见的是以下的几个: 注解 说明   EnableCaching 开启缓存注解功能   Cacheable 在方法执行前spring先查看缓存中是否有数据,如果有数据,则直接返回缓存数据&#x…

2026/7/1 2:32:03阅读更多 →
Grok It:让 Claude Code 和 Codex 直接调用 xAI/Grok 能力的 Agent 插件

Grok It:让 Claude Code 和 Codex 直接调用 xAI/Grok 能力的 Agent 插件

背景 2026 年 5 月中旬,xAI 在 accounts.x.ai 正式开放了 OAuth 登录流程——SuperGrok 或 X Premium 订阅用户可以通过 OAuth 2.0 授权,直接调用 Grok 的内置工具(x_search、web_search、图像/视频生成),而且优先消耗…

2026/7/1 2:32:03阅读更多 →
按照这个方法真的领到了8元,千问新用户专属220372

按照这个方法真的领到了8元,千问新用户专属220372

按照这个方法真的领到了8元,超简单,实打实的,可点奶茶外卖.千问无门槛优惠券 大数据推给有需要的人,下载千问,输入口令:千问新用户专属220372,就可以领取啦按照这个方法真的领到了8元这个是千问…

2026/7/1 2:32:03阅读更多 →
企业级AI Agent实战:Hermes Agent与Harness Engineering工程化落地指南

企业级AI Agent实战:Hermes Agent与Harness Engineering工程化落地指南

如果你正在寻找一个能真正将AI大模型能力融入企业级应用的实战框架,那么Hermes Agent与Harness Engineering的组合绝对值得你花时间研究。这不是一个简单的概念演示,而是一套旨在解决实际业务问题、强调工程化落地的AI Agent开发范式。它关注的重点不是模…

2026/7/1 3:42:08阅读更多 →
超越Redis:揭秘操作系统底层缓存机制的性能优化实践

超越Redis:揭秘操作系统底层缓存机制的性能优化实践

在开发高性能应用时,我们常常第一时间想到 Redis 这类分布式缓存中间件,仿佛它是解决所有性能瓶颈的“银弹”。然而,你是否遇到过这样的场景:即使引入了 Redis,应用的响应速度依然不尽如人意,尤其是在处理大…

2026/7/1 3:42:08阅读更多 →
操作系统缓存 vs Redis:揭秘高性能缓存的底层原理与选型策略

操作系统缓存 vs Redis:揭秘高性能缓存的底层原理与选型策略

在实际后端开发和系统优化中,Redis 作为高性能缓存中间件几乎成了标配。当应用响应变慢时,开发者的第一反应往往是“加一层 Redis 缓存”。然而,这种思维定式可能让我们忽略了离数据更近、性能损耗更低、且早已存在的“隐形缓存”——操作系统…

2026/7/1 3:42:08阅读更多 →
超越Redis:揭秘操作系统隐形缓存体系,优化系统性能的底层逻辑

超越Redis:揭秘操作系统隐形缓存体系,优化系统性能的底层逻辑

你是不是也遇到过这种情况:系统性能瓶颈,第一反应就是“上Redis缓存”;接口响应慢,立刻想到“是不是缓存没命中”;甚至很多架构设计文档里,缓存层几乎成了标配,仿佛没有Redis的系统就不够“现代…

2026/7/1 3:42:08阅读更多 →
跟风,网上说能白发变黑是真的吗?

跟风,网上说能白发变黑是真的吗?

跟风,网上说能白发变黑是真的吗?答案是真的,对于营养不均衡、压力熬夜导致的营养缺乏型白发,通过科学补充对应营养素,确实可以为黑色素合成提供支持,改善发根灰白问题一、跟风尝试白发变黑方法前&#xff0…

2026/7/1 3:42:08阅读更多 →
选私域SaaS工具,最容易踩什么坑?

选私域SaaS工具,最容易踩什么坑?

私域SaaS的采购决策,正在变成一笔算不清的账。工具越上越多,从企微SCRM到直播软件到小程序商城,单点工具凑了六七个,数据却各管一段。最后复盘发现,真正在用的功能不到三成,剩下七成是"为了不留短板&q…

2026/7/1 3:37:07阅读更多 →
AI Coding 六个月真实ROI账本:产品经理的血泪教训,研发的冷静忠告

AI Coding 六个月真实ROI账本:产品经理的血泪教训,研发的冷静忠告

6个月前的2025年12月,Boris Cherny 公开宣布自己卸载了 IDE。一时间,Vibe Coding 成了全行业最热的话题。6个月后,当我们回过头来拉一份真实账本,发现事情远没有"一句话生成一个App"那么浪漫。本文从产品经理和研发两个…

2026/6/30 4:03:30阅读更多 →
审计来了,数据权限全开——审计走了,怎么确保权限全部关掉?

审计来了,数据权限全开——审计走了,怎么确保权限全部关掉?

引言:审计结束三个月了,审计员的权限还没关某城商行每年按照监管要求开展至少一次数据安全审计。审计期间,内审部门需要抽样检查各类业务数据——交易流水、客户信息、员工操作日志、权限配置记录。这些数据分布在不同系统中,审计…

2026/6/30 4:36:27阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/1 0:01:44阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/1 0:01:44阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/1 0:01:44阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/1 0:01:44阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/1 0:01:44阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/1 0:01:44阅读更多 →