常用注解
-
@NotNull
适用于基本数据类型(Integer,Long,Double等等),当 @NotNull 注解被使用在 String 类型的数据上,则表示该数据不能为 Null(但是可以为 Empty) -
@NotBlank
适用于 String 类型的数据上,加了@NotBlank 注解的参数不能为 Null 且 trim() 之后 size > 0 -
@NotEmpty
适用于 String、Collection集合、Map、数组等等,加了@NotEmpty 注解的参数不能为 Null 或者 长度为 0注意: NotEmpty不会对String进行trim(),NotBlank会对String进行trim()
-
@AssertTrue
-
@AssertFalse
-
@Min
-
@Max
-
@DecimalMin
-
@DecimalMax
-
@Size
-
@Digits
-
@Past
-
@Future
-
@Pattern
-
@Email
-
@Length
-
@Range
基本使用
-
添加依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-validation</artifactId> <version>2.4.12</version> </dependency>
-
添加注解
-
注解生效,通过 @Valid或@Validated
-
获取不合法的提示信息,可以用BindingResult接受
分组校验
在实际的业务场景中同一个Entity的校验可能会有不同的规则,比如添加数据品牌id必须为空,而更新数据品牌Id必须不为空,针对这种情况我们需要使用分组校验来实现
- 定义分组标记接
- 指定分组规则
- 开启分组校验
自定义校验注解
- 自定义校验注解
/** * 自定义的校验注解 */ @Documented @Constraint(validatedBy = { }) @Target({ ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE, ElementType.CONSTRUCTOR, ElementType.PARAMETER, ElementType.TYPE_USE }) @Retention(RetentionPolicy.RUNTIME) public @interface ListValue { String message() default "{com.msb.common.valid.ListValue.message}"; Class<?>[] groups() default { }; Class<? extends Payload>[] payload() default { }; int[] val() default {}; }
- 自定义校验器
import javax.validation.ConstraintValidator; import javax.validation.ConstraintValidatorContext; import java.lang.annotation.Annotation; import java.sql.ClientInfoStatus; import java.util.HashSet; /** * 对应的校验注解的校验器 */ public class ListValueConstraintValidator implements ConstraintValidator<ListValue,Integer> { private HashSet<Integer> set = new HashSet<>(); /** * 初始化的方法 * 举例:@ListValue(val={1,0}) * 获取到 1 0 * @param constraintAnnotation */ @Override public void initialize(ListValue constraintAnnotation) { int[] val = constraintAnnotation.val();// 0 1 for (int i : val) { set.add(i); } } /** * 判断校验是否成功的方法 * @param value 客户端传递的对应的属性的值 判断value是否在0 , 1 中 * @param context * @return */ @Override public boolean isValid(Integer value, ConstraintValidatorContext context) { return set.contains(value); } }
- 关联自定义的注解和校验器