spring boot 3 的 @valid 要配合校验依赖和 dto 约束。检查是否给 @requestbody 参数加了 @valid。如果要校验嵌套对象,还需在嵌套字段上声明级联校验。

先确认项目有校验依赖
在 Spring Boot 管理依赖版本的 Maven 项目中加入以下依赖。
<dependency><groupid>org.springframework.boot</groupid><artifactid>spring-boot-starter-validation</artifactid></dependency>
Spring Boot 3 的注解来自 jakarta.validation。
给请求和嵌套对象各加校验
在可扫描的包内创建控制器。示例要求联系人对象存在,联系人姓名也不能为空。
import jakarta.validation.Valid;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import org.springframework.web.bind.annotation.*;
@RestController
class SignupController {
record Contact(@NotBlank String name) {}
record Signup(@NotNull @Valid Contact contact) {}
@PostMapping("/signups")
String signup(@Valid @RequestBody Signup body) {
return body.contact().name();
}
}

NotNull 检查 contact 是否存在,Valid 把校验继续传给 Contact。
分别测试缺字段和有效输入
启动应用后在本机发送两组 JSON。
curl -i -H 'Content-Type: application/json' \
-d '{"contact":{"name":""}}' http://localhost:8080/signups
curl -i -H 'Content-Type: application/json' \
-d '{"contact":{"name":"Demo"}}' http://localhost:8080/signups
默认处理下第一条应返回 400,第二条返回 200 和 Demo。自定义异常处理时,也要确认它保留了预期状态。











