Reference
Maven
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-validation -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>内置的错误提示文件
validationMessages_z

使用
- 在 Controller 方法的参数列表前面添加
@Valid注解

- 在 Entity 要校验的字段添加校验注解

- 在校验的参数后,加上
BindingResult可以获取校验异常的详细信息

分组校验
- 使用
@Validated开启分组校验,并指定分组接口

@Validated需要指定分组,新增分组校验接口

- 给校验注解指定
groups属性,指定注解在何种接口生效

自定义校验
- 编写注解
@Constraint:指定校验器
message:指定返回的错误提示
groups:指定校验分组
vals:自定义属性,指定输入的值
@Documented
@Constraint(validatedBy = { ListValueConstraintValidator.class })
@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE })
@Retention(RUNTIME)
public @interface ListValue {
String message() default "{com.study.common.vaild.ListValue.message}";
Class<?>[] groups() default { };
Class<? extends Payload>[] payload() default { };
int[] vals() default { };
}- 编写校验器
实现 ConstraintValidator<A extends Annotation, T> 接口,重写 initialize,isValid 方法
A自定义的注解T目标参数的类型
public class ListValueConstraintValidator implements ConstraintValidator<ListValue, Integer> {
private Set<Integer> set = new HashSet<>();
/**
* 初始化
* @param constraintAnnotation 注解输入的值
*/
@Override
public void initialize(ListValue constraintAnnotation) {
int[] vals = constraintAnnotation.vals();
for (int val: vals) {
set.add(val);
}
}
/**
* 判断是否校验成功
* @param value 需要校验的值
* @param context
* @return
*/
@Override
public boolean isValid(Integer value, ConstraintValidatorContext context) {
return set.contains(value);
}
}- 编写提示配置文件
resources/ValidationMessages.properties
com.study.common.vaild.ListValue.message=必须提交指定的值- 使用注解
showStatus 的值只能是 0 或 1
@ListValue(vals={0, 1}, groups = {AddGroup.class})
private Integer showStatus;