1. 基本的使用
1.实体类
在需要验证的字段上添加相应的验证注解
package com.moon.module.entity;import javax.validation.constraints.NotBlank;@Datapublic 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*/@Overridepublic void initialize(MyNotBlank constraintAnnotation) {System.out.println("验证器初始化");}/*** 验证逻辑** @param value 被验证的值* @param context* @return true:验证通过 false:验证失败*/@Overridepublic boolean isValid(Object value, ConstraintValidatorContext context) {System.out.println("自定义验证器执行");return ObjectUtil.isNotEmpty(value);}}
3.使用自定义注解进行验证
package com.moon.module.entity;import javax.validation.constraints.NotBlank;@Datapublic class User {private String id;@NotBlank(message = "用户名不能为空")private String username;@MyNotBlankprivate String age;@NotBlank(message = "性别不能为空")private String sex;}
4.运行结果

