- 定义一个校验器:
package com.shop.common.valid;
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
import java.util.HashSet;
import java.util.Set;
/**
* @author admin
* @version 1.0.0
* @ClassName ListValueConstraintValidator.java
* @Description TODO
* @createTime 2022年01月23日 14:14:00
*/
public class ListValueConstraintValidator implements ConstraintValidator<ListValue,Integer> {
private Set<Integer> set = new HashSet<>();
// 初始化方法
@Override
public void initialize(ListValue constraintAnnotation) {
int[] values = constraintAnnotation.value();
if (values!=null){
for (int value : values) {
set.add(value);
}
}
}
// 判断是否校验成功
/**
*
* @param integer 需要校验的值
* @param constraintValidatorContext
* @return
*/
@Override
public boolean isValid(Integer integer, ConstraintValidatorContext constraintValidatorContext) {
return set.contains(integer);
}
}
- 定义检验注解
package com.shop.common.valid;
import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.*;
/**
* @author admin
* @version 1.0.0
* @ClassName ListValue.java
* @Description TODO
* @createTime 2022年01月23日 14:03:00
*/
@Documented
@Constraint(validatedBy = {ListValueConstraintValidator.class}) // 指定校验器,可以指定多个检验器安全屋
@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.shop.common.valid.ListValue.message}";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
int[] value() default {};
}
- 编写配置文件ValidationMessages.properties:
com.shop.common.valid.ListValue.message=必须提交指定的值
*实体类字段上添加注解: