在Spring Boot Web开发中,方法参数校验是常见需求。若每次均手动编写校验逻辑,易导致代码重复、维护困难。Spring Boot原生集成Validation框架,支持通过@NotNull、@Size、@Pattern等注解直接声明校验规则,配合@Valid或@Validated注解触发校验机制,使参数验证简洁、统一且可读性强,显著提升开发效率与代码质量。
1、 首先在项目中引入Spring Boot Web依赖,该依赖已内置Hibernate Validator组件,可直接利用其提供的注解与功能对请求参数进行校验,确保数据合法性与完整性。
2、 下图展示了 Hibernate Validator 支持的各类参数校验注解,其中最常使用的是 @NotNull、@NotBlank 等,主要用于对字符串等类型的数据进行非空、非空白等基础校验。
3、 当Hibernate Validator提供的内置注解无法满足特定业务校验需求时,可自行开发自定义约束注解。以创建名为`MyConstraint`的注解为例:需通过`@Target`明确其适用目标(如字段、方法或类);使用`@Retention(RetentionPolicy.RUNTIME)`确保注解在运行时仍可被反射读取;并通过`@Constraint(validatedBy = MyConstraintValidator.class)`关联具体的校验逻辑实现类。此外,该注解还必须包含三个标准属性——`message()`用于指定校验失败时的提示信息,`groups()`支持分组校验,`payload()`则用于传递额外的元数据。完成注解定义后,还需编写对应的校验器类,实现`ConstraintValidator`接口,并重写`isValid()`方法以封装具体校验规则。
4、 接下来需编写一个注解校验器类,命名为MyConstraintValidator,该类需实现ConstraintValidator接口。该接口声明了两个泛型类型参数:第一个指定所支持的自定义约束注解类型,第二个则限定该注解可作用的目标字段的数据类型。通过实现该接口并重写相应方法,即可在运行时对标注该注解的字段进行有效性验证。
5、 在Spring AOP中,核心概念包括切入点与增强。切入点通常通过自定义注解实现,需显式标注在目标方法上,AOP机制才可识别并织入逻辑。增强则指在特定连接点(如方法执行前后、异常抛出时等)所执行的横切业务代码;其中,`pjp.proceed()`用于继续执行原目标方法。当Controller层发生异常时,异常处理流程遵循固定顺序:首先由切面(Aspect)捕获,若未被处理,则交由全局异常处理器(ControllerAdvice),再传递至拦截器(Interceptor),最终到达过滤器(Filter)进行兜底处理。这一链式机制保障了异常处理的层次性与可控性。
6、 此前我们曾介绍过如何在使用参数校验注解时统一输出校验失败信息。该功能可通过自定义切面实现,避免在每个方法中重复编写校验逻辑。具体做法是:定义一个专用的校验异常类ValidateException,在切面中捕获校验失败结果并主动抛出该异常,从而实现错误处理的集中化与标准化。

