注解
在创建注解之前,我们首先明确电话号码校验逻辑,要实现:
- 手机号码不能为空
- 符合手机号的正则表达式
- 电话号码的长度校验
创建接口
@Documented
@Constraint(validatedBy = PhoneNumberValidator.class)
@Target({ElementType.FIELD, ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
public @interface PhoneNumber {
String message() default "Invalid phone number";
Class<?>[] groups() default { };
Class<? extends Payload>[] payload() default { };
}
逻辑实现
public class PhoneNumberValidator implements ConstraintValidator<PhoneNumber, String> {
/**
* Implements the validation logic.
* The state of {@code value} must not be altered.
* <p>
* This method can be accessed concurrently, thread-safety must be ensured
* by the implementation.
*
* @param value object to validate
* @param context context in which the constraint is evaluated
*
* @return {@code false} if {@code value} does not pass the constraint
*/
@Override
public boolean isValid(String phoneField, ConstraintValidatorContext context) {
// can be null
if (phoneField == null) return true;
return phoneField != null && phoneField.matches("[0-9]+")
&& (phoneField.length() > 8) && (phoneField.length() < 14);
}
}