@Valid
使用@Valid注解标注的参数,可直接配置校验注解拦截请求。
@NotNull:字段不能为空。
@NotBlank:字段不能为空或空白字符。
@NotEmpty:字段不能为空或数量为零。(字符长度、集合大小、map大小、数组长度不能为零)
@Size:字段元素大小范围。(null也视为有效元素)
@Null:字段必须为空。
@Min:字段最小值。(不适用double和float)
@Max:字段最大值。(不适用double和float)
@Range:字段范围。(@Min和@Max结合)
@Length:字段长度范围。
@Email:字段必须符合Email格式。
@AssertTrue:推断是否正确。
嵌套对象的校验
例:UserVo中的Info对象必须加上@Valid注解才能校验Info对象中添加的校验规则。
两个字段联合校验
多个字段联合校验,可在Bean类中定义isValid()方法,结合@AssertTrue注解,Spring框架将自动调用isValid()方法,根据自定义条件校验。
例子
@Data
@Builder
public class UserVo {
@NotBlank(message = "用户名不能为空")
@Length(min = 3, max = 8, message = "长度不正确")
private String name;
@Min(value = 0, message = "年龄最小0")
@Max(value = 120, message = "年龄最大120")
private int age;
@Email(message = "邮件格式不正确")
@NotBlank(message = "邮件不能为空")
private String email;
@Negative(message = "只能负数")
private int negative;
@Positive(message = "只能正数")
private int positive;
@NegativeOrZero(message = "只能负数或0")
private int negativeOrZero;
@PositiveOrZero(message = "只能正数或0")
private int positiveOrZero;
// 级联对象必须不能为空和加@Vaid才能验证
@Valid
@NotNull(message = "信息不能为空")
private Info info;
}
@Data
@Builder
public class Info {
@Range(min = 0, max = 100, message = "数值1不在正确范围")
private int integer1;
@Range(min = 0, max = 100, message = "数值2不在正确范围")
private int integer2;
@NotNull(message = "爱好不能为空")
@Size(min = 1, max =3, message = "爱好个数不正确")
private List hobbies;
@NotNull(message = "技能不能为空")
@Size(min = 1, max =3, message = "技能个数不正确") // 过滤相同,必须是1~3个不同的才符合规则
private Set skills;
@AssertTrue(message = "integer1必须小于integer2")
public boolean isValid() {
return this.integer1 < this.integer2;
}
}
@RestController
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
@PostMapping("/test")
public String test(@Valid @RequestBody UserVo userVo) {
return "ok";
}
}
代码