spring boot 校验嵌套对象需要在父对象的字段上添加 @valid 或 @validated 注解,并在子对象属性上定义具体的校验规则。这样在请求进入时,框架会自动递归遍历并验证所有层级。

如何在校验 DTO 中启用嵌套验证
通过在父类 DTO 的嵌套字段前加 @Valid 即可触发级联校验。例如在 Controller 方法参数上使用 @Valid 注解,框架会检查该字段类型,若为对象则继续深入其内部属性进行校验。

import javax.validation.Valid;
import javax.validation.constraints.NotBlank;
public class OrderDTO {
@NotBlank(message = "订单号不能为空")
private String orderId;
@Valid // 关键:启用嵌套校验
private UserDTO user;
}
public class UserDTO {
@NotBlank(message = "用户名不能为空")
private String name;
}
如何处理嵌套对象中的集合元素校验
当嵌套对象是集合(如 List)时,同样需要在集合字段上添加 @Valid。Spring Boot 会遍历集合中的每个元素,并对每个元素执行相同的校验逻辑。这确保了列表内所有对象都符合规范。

import java.util.List;
import javax.validation.Valid;
import javax.validation.constraints.NotNull;
public class BatchOrderDTO {
@NotNull(message = "商品列表不能为空")
@Valid // 对列表中每个 ItemDTO 进行校验
private List<itemdto> items;
}
public class ItemDTO {
@NotNull(message = "数量必须大于0")
private Integer quantity;
}</itemdto>
如果嵌套对象校验失败,返回的错误信息结构是怎样的
当嵌套对象校验失败时,Spring Boot 会将错误信息封装在 BindingResult 或全局异常处理器中。错误路径会使用点号表示层级关系,例如 user.name 表示 UserDTO 中的 name 字段校验失败。开发者可以通过解析这些路径来定位具体哪个子对象的哪个属性出了问题。











