1. 基本的使用

1.实体类

在需要验证的字段上添加相应的验证注解

  1. package com.moon.module.entity;
  2. import javax.validation.constraints.NotBlank;
  3. @Data
  4. public class User {
  5. private String id;
  6. @NotBlank(message = "用户名不能为空")
  7. private String username;
  8. @NotBlank(message = "年龄不能为空")
  9. private String age;
  10. @NotBlank(message = "性别不能为空")
  11. private String sex;
  12. }

2.Controller

2.1在需要验证的对象钱添加@Valid注解进行验证

2.2参数中注入BindingResult对象

使用BindingResult对象获取错误信息
如果不添加该对象,信息验证失败后直接报错

  1. @PostMapping("/saveCatch")
  2. public User saveCatch(@RequestBody @Valid User user, BindingResult error){
  3. if (error.hasErrors()){
  4. error.getAllErrors().forEach(each-> System.out.println(each.getDefaultMessage()));
  5. }
  6. user.setId("2");
  7. return user;
  8. }

2 .注解说明

  1. 限制 说明
  2. @Null 限制只能为null
  3. @NotNull 限制必须不为null
  4. @AssertFalse 限制必须为false
  5. @AssertTrue 限制必须为true
  6. @DecimalMax(value) 限制必须为一个不大于指定值的数字
  7. @DecimalMin(value) 限制必须为一个不小于指定值的数字
  8. @Digits(integer,fraction) 限制必须为一个小数,且整数部分的位数不能超过integer,小数部分的位数不能超过fraction
  9. @Future 限制必须是一个将来的日期
  10. @Max(value) 限制必须为一个不大于指定值的数字
  11. @Min(value) 限制必须为一个不小于指定值的数字
  12. @Past 限制必须是一个过去的日期
  13. @Pattern(value) 限制必须符合指定的正则表达式
  14. @Size(max,min) 限制字符长度必须在minmax之间
  15. @Past 验证注解的元素值(日期类型)比当前时间早
  16. @NotEmpty 验证注解的元素值不为null且不为空(字符串长度不为0、集合大小不为0
  17. @NotBlank 验证注解的元素值不为空(不为null、去除首位空格后长度为0),不同于@NotEmpty@NotBlank只应用于字符串且在比较时会去除字符串的空格
  18. @Email 验证注解的元素值是Email,也可以通过正则表达式和flag指定自定义的email格式

3. 自定义注解

1.自定义验证注解

  1. package com.moon.comm.util.valid.annotation;
  2. import com.moon.comm.util.valid.clazz.MyNotBlankClass;
  3. import javax.validation.Constraint;
  4. import javax.validation.Payload;
  5. import java.lang.annotation.ElementType;
  6. import java.lang.annotation.Retention;
  7. import java.lang.annotation.RetentionPolicy;
  8. import java.lang.annotation.Target;
  9. /**
  10. * 自定义验证注解
  11. * <p>
  12. * 必须有三个方法
  13. */
  14. @Target({ElementType.METHOD, ElementType.FIELD})
  15. @Retention(RetentionPolicy.RUNTIME)
  16. @Constraint(validatedBy = MyNotBlankClass.class) // valid注解,指定验证类
  17. public @interface MyNotBlank {
  18. String message() default "内容不能为空";
  19. Class<?>[] groups() default {};
  20. Class<? extends Payload>[] payload() default {};
  21. }

2.自定义验证类

  1. package com.moon.comm.util.valid.clazz;
  2. import cn.hutool.core.util.ObjectUtil;
  3. import com.moon.comm.util.valid.annotation.MyNotBlank;
  4. import javax.validation.ConstraintValidator;
  5. import javax.validation.ConstraintValidatorContext;
  6. /**
  7. * 实现ConstraintValidator<A,T>接口
  8. * A: 被哪个注解使用
  9. * T: 被注解的字段的数据类型(String.int.List ...)
  10. */
  11. public class MyNotBlankClass implements ConstraintValidator<MyNotBlank, Object> {
  12. /**
  13. * 注解初始化时方法
  14. *
  15. * @param constraintAnnotation
  16. */
  17. @Override
  18. public void initialize(MyNotBlank constraintAnnotation) {
  19. System.out.println("验证器初始化");
  20. }
  21. /**
  22. * 验证逻辑
  23. *
  24. * @param value 被验证的值
  25. * @param context
  26. * @return true:验证通过 false:验证失败
  27. */
  28. @Override
  29. public boolean isValid(Object value, ConstraintValidatorContext context) {
  30. System.out.println("自定义验证器执行");
  31. return ObjectUtil.isNotEmpty(value);
  32. }
  33. }

3.使用自定义注解进行验证

  1. package com.moon.module.entity;
  2. import javax.validation.constraints.NotBlank;
  3. @Data
  4. public class User {
  5. private String id;
  6. @NotBlank(message = "用户名不能为空")
  7. private String username;
  8. @MyNotBlank
  9. private String age;
  10. @NotBlank(message = "性别不能为空")
  11. private String sex;
  12. }

4.运行结果

图片.png