1、在需要校验的实体类的字段上加上自定义注解;
@ListValue(vals = {0, 1}) 表示这个字段是能为0或者1.
2、添加这个自定义注解的类;
import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.Documented;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;
import static java.lang.annotation.ElementType.*;
import static java.lang.annotation.ElementType.TYPE_USE;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
/**
* @author Qim.Wang
* @version 1.0
* @FileName:ListValue
* @description: 自定义注解
* @date 2022/9/18 9:47
*/
@Documented
@Constraint(validatedBy = { ListValueConstraintValidator.class })
@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE })
@Retention(RUNTIME)
public @interface ListValue {
String message() default "{com.atguigu.common.valid.ListValue.message}";
Class<?>[] groups() default { };
Class<? extends Payload>[] payload() default { };
int[] vals() default { };
}
3、创建配置文件ValidationMessages.properties;
配置信息为:
com.atguigu.common.valid.ListValue.message=必须提交指定的值
此处配置的就是默认的提示信息。
4、创建校验器ListValueConstraintValidator
package com.atguigu.common.valid;
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
import java.util.HashSet;
import java.util.Set;
/**
* @author Qim.Wang
* @version 1.0.0
* @ClassName ListValueConstraintValidator.java
* @Description 泛型的Integer是因为加注解的字段需要
* @CreateTime 2022年09月18日 10:12:00
*/
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 integer 需要校验的值
* @param constraintValidatorContext 校验的上下文环境信息
* @return
*/
@Override
public boolean isValid(Integer integer, ConstraintValidatorContext constraintValidatorContext) {
return set.contains(integer);
}
}
5、postman测试结果:
6、如果自定义校验的返回信息出现乱码,可以试一试修改文件编码:
需要将文件删除后重新创建。