一、基本使用
Javax.validation是spring集成自带的一个参数校验接口。可通过添加注解来设置校验条件。
下面以springboot项目为例进行说明。创建web项目后,不需要再添加其他的依赖;
1、 被校验参数
1 public class User {
2 private Long id;
3 @NotBlank(message = "用户名不能为空")
4 private String name;
5 @NotBlank(message = "手机号不能为空")
6 private String phone;
7 @NotNull(message = "年龄不能为空")
8 private Integer age;
9 }
2、Controller
1 @RestController
2 public class TestController {
3
4 @RequestMapping("/create")
5 public String createUser(@Valid User user, BindingResult bindingResult){
6 if (bindingResult.hasErrors()){
7 return bindingResult.getFieldError().getDefaultMessage();
8 }
9 return "success";
10 }
11 }
3、启动服务,然后在本地请求,如果请求参数不对,即可看到我们给出的错误信息
二、所有原生可用的注解
1 @NotBlank 元素不能为null,且不能全是空格,用于校验字符串;
2 @NotEmpty 元素不能为null,且不能为空,用于校验集合类型数据;
3 @NotNull 元素不能为null,所有类型的数据都可以校验;
4 @Null 元素必须为null, 所有类型的数据都可以校验;
5 @Size(min = 1, max = 5) 元素长度介于给定值之前(包含边界),用于校验集合类型数据(包含字符串),;
6 @Future 元素为时间,且是将来的时间;
7 @FutureOrPresent 元素为时间,且是现在或将来的时间;
8 @Past 元素为时间,且是已经过去的时间;
9 @PastOrPresent 元素为时间,且是现在或已经过去的时间;
10 @Max(value = 2) 元素值不大于给定值value,可校验所有Number类型数据(除了double和float);;
11 @Min(value = 1) 元素值不小于给定值value,可校验所有Number类型数据(除了double和float);;
12 @Negative 元素值为负数,可校验所有Number类型数据;;
13 @NegativeOrZero 元素值为负数或0,可校验所有Number类型数据;;
14 @Positive 元素值为正数,可校验所有Number类型数据;;
15 @PositiveOrZero 元素值为正数或0,可校验所有Number类型数据;;
16 @DecimalMax(inclusive = true, value = "3.2") 元素值不大于给定值value, inclusive默认是true,可不填,可校验所有Number类型数据(除了double和float);
17 @DecimalMin(inclusive = false, value = "23") 元素值大于给定值value, inclusive默认是true,可不填,可校验所有Number类型数据(除了double和float);
18 @Digits(integer = 5, fraction = 7) 元素为数字,且最大长度不超过7位,整数部分最高位不超过5位;
19 @AssertFalse 元素的值必须为false,用于校验布尔类型元素;
20 @AssertTrue 元素的值必须为true,用于校验布尔类型元素;
21 @Email 邮箱名格式校验
注:除了前4个外,其他所有的null会被当作有效处理;
三、自定义校验注解
1、定义注解
1 @Target({ElementType.FIELD, ElementType.METHOD})
2 @Retention(RetentionPolicy.RUNTIME)
3 @Constraint(validatedBy = NameValidator.class)
4 public @interface NameA {
5
6 String message() default "这个名字不是以a开头";
7 Class<?>[] groups() default {};
8 Class<? extends Payload>[] payload() default {};
9 }
注意定义时message(),groups(),payload()这三个方法必需要定义,其他的就可以自己增加了;
2、定义校验方法;
1 public class NameValidator implements ConstraintValidator<NameA, String> {
2
3 private String reg = "[a,]\\w+";
4 private Pattern pattern = Pattern.compile(reg);
5
6 @Override
7 public void initialize(NameA name){
8
9 }
10
11 @Override
12 public boolean isValid(String name, ConstraintValidatorContext context){
13 if (name == null){
14 return false;
15 }
16 return pattern.matcher(name).matches();
17 }
18 }