1. 基本的使用
1.实体类
在需要验证的字段上添加相应的验证注解
package com.moon.module.entity;
import javax.validation.constraints.NotBlank;
@Data
public class User {
private String id;
@NotBlank(message = "用户名不能为空")
private String username;
@NotBlank(message = "年龄不能为空")
private String age;
@NotBlank(message = "性别不能为空")
private String sex;
}
2.Controller
2.1在需要验证的对象钱添加@Valid注解进行验证
2.2参数中注入BindingResult对象
使用BindingResult对象获取错误信息
如果不添加该对象,信息验证失败后直接报错
@PostMapping("/saveCatch")
public User saveCatch(@RequestBody @Valid User user, BindingResult error){
if (error.hasErrors()){
error.getAllErrors().forEach(each-> System.out.println(each.getDefaultMessage()));
}
user.setId("2");
return user;
}
2 .注解说明
限制 说明
@Null 限制只能为null
@NotNull 限制必须不为null
@AssertFalse 限制必须为false
@AssertTrue 限制必须为true
@DecimalMax(value) 限制必须为一个不大于指定值的数字
@DecimalMin(value) 限制必须为一个不小于指定值的数字
@Digits(integer,fraction) 限制必须为一个小数,且整数部分的位数不能超过integer,小数部分的位数不能超过fraction
@Future 限制必须是一个将来的日期
@Max(value) 限制必须为一个不大于指定值的数字
@Min(value) 限制必须为一个不小于指定值的数字
@Past 限制必须是一个过去的日期
@Pattern(value) 限制必须符合指定的正则表达式
@Size(max,min) 限制字符长度必须在min到max之间
@Past 验证注解的元素值(日期类型)比当前时间早
@NotEmpty 验证注解的元素值不为null且不为空(字符串长度不为0、集合大小不为0)
@NotBlank 验证注解的元素值不为空(不为null、去除首位空格后长度为0),不同于@NotEmpty,@NotBlank只应用于字符串且在比较时会去除字符串的空格
@Email 验证注解的元素值是Email,也可以通过正则表达式和flag指定自定义的email格式
3. 自定义注解
1.自定义验证注解
package com.moon.comm.util.valid.annotation;
import com.moon.comm.util.valid.clazz.MyNotBlankClass;
import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* 自定义验证注解
* <p>
* 必须有三个方法
*/
@Target({ElementType.METHOD, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = MyNotBlankClass.class) // valid注解,指定验证类
public @interface MyNotBlank {
String message() default "内容不能为空";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
2.自定义验证类
package com.moon.comm.util.valid.clazz;
import cn.hutool.core.util.ObjectUtil;
import com.moon.comm.util.valid.annotation.MyNotBlank;
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
/**
* 实现ConstraintValidator<A,T>接口
* A: 被哪个注解使用
* T: 被注解的字段的数据类型(String.int.List ...)
*/
public class MyNotBlankClass implements ConstraintValidator<MyNotBlank, Object> {
/**
* 注解初始化时方法
*
* @param constraintAnnotation
*/
@Override
public void initialize(MyNotBlank constraintAnnotation) {
System.out.println("验证器初始化");
}
/**
* 验证逻辑
*
* @param value 被验证的值
* @param context
* @return true:验证通过 false:验证失败
*/
@Override
public boolean isValid(Object value, ConstraintValidatorContext context) {
System.out.println("自定义验证器执行");
return ObjectUtil.isNotEmpty(value);
}
}
3.使用自定义注解进行验证
package com.moon.module.entity;
import javax.validation.constraints.NotBlank;
@Data
public class User {
private String id;
@NotBlank(message = "用户名不能为空")
private String username;
@MyNotBlank
private String age;
@NotBlank(message = "性别不能为空")
private String sex;
}