谷粒商城品牌管理校验(十一)
69、商品服务-API-品牌管理-JSR303自定义校验注解
JSR 303 自定义校验注解
(1)为什么使用自定义校验注解?
上面的注解满足不了业务需求时,可以自定义校验注解,自定义校验规则。
(2)步骤:
Step1:
需要自定义一个校验注解。
可以创建一个 ValidationMessages.properties 用于保存默认的 message 信息。
Step2:
需要自定义一个校验器,即自定义校验规则。
实现 ConstraintValidator 接口,并重写相关方法。
注:
initialize 方法用于初始化,可以获取 自定义的属性的值。
isValid 方法用于校验,可以获取到实际的值,然后与自定义的属性值进行比较。
Step3:
将校验注解 与 校验器 关联起来。
@Constraint(validatedBy = {TestValidConstraintValidator.class})
(3)使用:
如下例,自定义一个校验规则,判断数据长度是否合法。
默认为 String 属性,当 String 为 Null 或者 长度大于 5 时,校验不通过。
可以自定义 长度。
Step1:
自定义一个校验注解,@ListValue,用于判断是否指定的值。
/**
* @author WGR
* @create 2020/6/1 -- 21:34
*/
@Documented
@Constraint(validatedBy = { ListValueConstraintValidator.class })
@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE })
@Retention(RUNTIME)
public @interface ListValue {
String message() default "{com.dalianpai.common.valid.ListValue.message}";
Class<?>[] groups() default { };
Class<? extends Payload>[] payload() default { };
int[] vals() default { };
}
配置文件内容:

Step2:
自定义一个校验器ListValueConstraintValidator, 用于检测值是否合法。
/**
* @author WGR
* @create 2020/6/1 -- 21:35
*/
public class ListValueConstraintValidator implements ConstraintValidator<ListValue,Integer> {
private Set<Integer> set = new HashSet<>();
//初始化方法
@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);
}
}
Step3:
使用注解。

使用 Postman 测试。

浙公网安备 33010602011771号