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;