参数验证是 Java Web 应用的第一道防线,其核心价值在于:抵御恶意行为、保证业务数据合法性、简化代码并提升用户体验。在实际开发中,通常结合 Spring 的 @Validated 与 JSR-303 注解(如 @NotNull、@Pattern)实现自动化参数验证,既规范又高效。
JSR 303 是 Java 规范提案(Java Specification Requests) 中的一项标准,全称为 Bean Validation 1.0,它定义了一套用于 JavaBean 数据校验的元数据模型和 API。其核心目标是通过注解的方式声明对象属性的校验规则,从而替代繁琐的手动校验逻辑(如大量 if-else 判断),让代码更简洁、可读性更强。
JSR 303 只是规范,需要具体的实现类才能生效。最常用的实现是 Hibernate Validator。在 Spring Boot 应用中,无需手动添加 Hibernate Validator 依赖,可以通过导入 spring-boot-starter-validation 的方式来使用,它包含了 Spring Boot 参数校验所需的全部依赖组件。

校验参数需要用到 jakarta.validation 包下的约束注解,它们既可以用在方法参数上,也可以用在参数类成员变量上。

参数验证场景
方法参数验证
设置验证规则 name 不能为 null
请求的时候不传 name 参数

这时接口就会直接返回 Validation failure 错误。
对象验证
嵌套对象验证
在需要验证的嵌套成员上使用 @Valid 注解触发嵌套对象的验证。
分组验证
当一个实体类需要在不同场景使用不同验证规则时,就需要利用 @Validated 的分组验证功能了,例如用户的 “新增” 和 “修改”。嵌套对象的验证也需要定义分组规则。
自定义验证
自定义验证需要创建“注解”和“验证器”两个文件。
1686



被折叠的 条评论
为什么被折叠?



