Spring Boot 中 @Valid 参数校验核心为三步:加 spring-boot-starter-validation 依赖、在实体字段加约束注解(嵌套对象需加 @Valid)、Controller 参数前加 @Valid 并紧邻 BindingResult 捕获错误;它专注递归验证对象结构,不支持分组,GET 请求参数校验需改用 @Validated。

在 Spring Boot 中用 @Valid 做参数校验,核心就三步:加依赖、加注解、加触发。它不负责分组或方法级控制,专注“递归验证对象及其嵌套结构”,适合单场景统一校验。
基础配置:确保校验器就位
Spring Boot 3 默认使用 Jakarta Validation(即 jakarta.validation),只需引入 starter:
无需额外配置,自动装配 Hibernate Validator 实现。
实体类上写校验规则
把约束注解直接打在 DTO 或 VO 字段上,比如:
分析 Java Spring Boot 后端 Controller 代码,自动生成 Markdown 格式的接口文档。当用户说“生成 Java 接口文档”、“生成 API 文档”、“从 Spring 代码生成文档”时触发。
@NotBlank(message = "用户名不能为空")@Email(message = "邮箱格式不正确")@Min(value = 18, message = "年龄不能小于18")@Valid —— 这个特别关键:如果字段是另一个对象(如 Address address),必须加 @Valid 才会进入它的内部校验。
Controller 层启用校验
在接收参数时,在参数前加 @Valid,并紧跟 BindingResult 捕获错误:
@PostMapping("/user")public R save(@RequestBody @Valid UserDTO dto, BindingResult result) {
if (result.hasErrors()) {
return R.fail(result.getFieldError().getDefaultMessage());
}
userService.save(dto);
return R.ok();}
注意:@Valid 必须和 BindingResult 紧邻,且顺序不能颠倒;否则校验失败会直接抛 MethodArgumentNotValidException,走全局异常处理器。
常见误区提醒
– @Valid 本身不支持分组,要实现“新增/更新不同规则”,得换 @Validated(AddGroup.class)
– 字段上没写 groups 的注解(如 @NotBlank),默认属于 Default 组,所有带 @Valid 的地方都会执行
– GET 请求的路径变量或查询参数(@RequestParam)不能直接用 @Valid 校验对象,需改用 @Validated 配合分组或手动封装










