自定义注解:
package com.fangzhou.common.annotation;
import com.fangzhou.common.validation.StringContainsValidator;
import jakarta.validation.Constraint;
import jakarta.validation.Payload;
import java.lang.annotation.*;
@Documented
@Constraint(validatedBy = StringContainsValidator.class)
@Target({ ElementType.PARAMETER,ElementType.FIELD })
@Retention(RetentionPolicy.RUNTIME)
public @interface StringContains {
String message() default "字符串不符合规则";
String[] limitValues() default {}; //校验参数 是否是 A/B/C 字符串
Class<?>[] groups() default { };
Class<? extends Payload>[] payload() default { };
boolean nullable() default false; //允许参数为null
}

验证器:

package com.fangzhou.common.validation;
import cn.hutool.core.util.StrUtil;
import com.fangzhou.common.annotation.StringContains;
import jakarta.validation.ConstraintValidator;
import jakarta.validation.ConstraintValidatorContext;
import java.util.Arrays;
import java.util.Set;
import java.util.stream.Collectors;
public class StringContainsValidator implements ConstraintValidator<StringContains, String> {
private Set<String> limitValues;
private boolean nullable;
@Override
public void initialize (StringContains constraintAnnotation) {
limitValues = Arrays.stream(constraintAnnotation.limitValues()).collect(Collectors.toSet());
nullable = constraintAnnotation.nullable();
}
@Override
public boolean isValid(String value, ConstraintValidatorContext context) {
if (StrUtil.isBlank(value)) {
if (nullable) {
return true;
}
return false;
}
return limitValues.contains(value.trim());
}
}
校验参数类型:

本文介绍了一种自定义注解的实现方式,该注解用于校验字符串是否符合预设的限制值。通过示例展示了如何创建自定义注解及对应的验证器,并应用于字段或参数的校验中。
3955

被折叠的 条评论
为什么被折叠?



