Springboot @Validate @Valid 基于复杂嵌套对象的参数校验示例
复杂对象
@Data
public class Object1 {@Length(max = 50,message = "长度不能超过50位字符")@NotBlank(message = "名称不能为空")private String name;@NotNull(message = "不能为空")private Integer grade;@NotNull(message = "计分展示不能为空")private Integer scoreDimension;@NotNull(message = "obj2s不能为空")@Validprivate List<Object2> obj2s;
}@Data
public class Object2{@Length(max = 50, message = "长度不能超过50位字符")@NotBlank(message = "分类名称不能为空")private String categoryName;@Validprivate List<Object3> obj3s;
}@Data
public class Object3{@NotNull(message = "分值不能为空")@Max(value =1000 , message = "分值最大不能超过1000")private Integer score;@Size(max = 500, message = "最多可输入500个字符")private String standards;@Size(max = 10, message = "标最多10条")private String[] urls;@NotNull(message = "不能为空")private Integer[] rating;
}//controller校验@PostMapping("/check")public Result<Void> check( @Validated @RequestBody Object1 obj1) {return servei1.check(obj1);}
说明:
@Validated 和@Valid的区别: @Validated : 用在类、方法和方法参数上,但不能用于成员属性。 @Valid:可以用在方法、构造函数、方法参数和成员属性上。 @Validated :支持分组验证,可以更细致地控制验证过程。此外,由于它是Spring专有的,因此可以更好地与Spring的其他功能(如Spring的依赖注入)集成。 @Valid:主要支持标准的Bean验证功能,不支持分组验证。 @Validated :不支持嵌套验证。 @Valid:支持嵌套验证,可以嵌套验证对象内部的属性。 @Size和@Length的区别: 两者都是限制字符串长度的;@Size更为通用。 @Size注解更为通用,可以应用于字符串和集合字段,使用min和max参数指定长度范围。这意味着它可以用于多种数据类型,包括字符串、集合和数组,对于字符串可以校验长度,对于集合和数组可以校验大小 @Length注解仅适用于字符串字段,使用length参数指定具体长度。它专门用于校验字符串的长度;