注解类
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.RetentionPolicy.RUNTIME; @Target({METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER}) @Retention(RUNTIME) @Documented @Constraint(validatedBy = StringLengthValidator.class) public @interface StringLength { // 必须加 String message() default "{javax.validation.constraints.NotNull.message}"; // 必须加 Class<?>[] groups() default {}; // 必须加 Class<? extends Payload>[] payload() default {}; int minLength() default 0; int maxLength() default 16; }
验证实现类
import javax.validation.ConstraintValidator; import javax.validation.ConstraintValidatorContext; import java.util.Objects; public class StringLengthValidator implements ConstraintValidator<StringLength, Object> { private StringLength stringLength; @Override public void initialize(StringLength constraintAnnotation) { this.stringLength = constraintAnnotation; } @Override public boolean isValid(Object value, ConstraintValidatorContext context) { if (Objects.isNull(value)) { return true; } if (null != stringLength) { int length = String.valueOf(value).length(); int maxLen = stringLength.maxLength(), minLen = stringLength.minLength(); return length >= minLen && length <= maxLen; } return false; } }