参数校验应与业务解耦,通过分离规则与执行、注解驱动声明式校验、动态上下文条件校验、批量错误收集及标准化返回,实现可维护、可复用、易扩展的统一校验体系。

校验逻辑与业务解耦
参数校验不应散落在各个 Controller 或 Service 方法中,否则难以维护、复用和统一管理。核心思路是将“校验什么”(规则)和“怎么校验”(执行)分离。比如手机号格式、密码强度、金额范围这些属于规则,而正则匹配、数值比较、空值判断属于执行细节。通过定义校验器接口(如 Validator
基于注解驱动的声明式校验
Java Bean Validation(JSR 303/380)已提供成熟基础,如 @NotNull、@Pattern、@Min。可在此之上扩展自定义注解(如 @ValidChineseName)并配套 ConstraintValidator 实现。关键在于:注解仅声明约束语义,不包含校验逻辑;所有校验行为由统一入口(如 AOP 切面或 Spring 的 @Validated 自动触发)集中调度。这样新增一个校验规则,只需新增注解 + 实现类,无需修改调用方代码。
支持运行时动态组合与条件校验
实际场景中,校验规则常随业务状态变化。例如“提交订单时校验优惠券是否过期,但保存草稿时不校验”。可通过引入规则上下文(ValidationContext)携带当前操作类型、用户角色、请求来源等信息,在 ConstraintValidator 中读取上下文决定是否执行某条规则。也可设计规则引擎式配置,把校验项抽象为 JSON 或 YAML 描述,运行时加载并组装成校验链,适应多租户或多渠道差异化校验需求。
统一错误收集与标准化返回
避免单个参数失败就抛异常中断流程,应支持批量收集所有校验错误。使用 Set
立即学习“Java免费学习笔记(深入)”;










