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不能为空")
@Valid
private List<Object2> obj2s;
}
@Data
public class Object2{
@Length(max = 50, message = "长度不能超过50位字符")
@NotBlank(message = "分类名称不能为空")
private String categoryName;
@Valid
private 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参数指定具体长度。它专门用于校验字符串的长度;