Java手机号注解校验

前言

在开发中,我们经常需要对手机号进行校验,以保证用户输入的手机号符合规范。为了方便校验手机号,我们可以使用注解来简化校验的代码逻辑。本文将介绍如何使用Java注解校验手机号,并提供相应的代码示例。

注解的定义

首先,我们需要定义一个注解来标记需要校验的手机号字段。我们可以使用@interface关键字来定义注解,并在注解中添加相应的元素。

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Mobile {
    String message() default "Invalid mobile number";
}

在上述代码中,我们定义了一个Mobile注解,并将其应用到类的字段上。该注解包含一个message元素,用于定义校验失败时的错误提示信息,默认值为"Invalid mobile number"。

注解的使用

我们可以通过在类的字段上添加Mobile注解来标记需要校验的手机号字段。然后,我们可以编写一个校验器,利用反射机制来获取被标记字段的值,并进行手机号的校验。

import java.lang.reflect.Field;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class MobileValidator {
    public static <T> boolean validate(T obj) {
        Class<?> clazz = obj.getClass();
        Field[] fields = clazz.getDeclaredFields();
        for (Field field : fields) {
            if (field.isAnnotationPresent(Mobile.class)) {
                field.setAccessible(true);
                Object value;
                try {
                    value = field.get(obj);
                } catch (IllegalAccessException e) {
                    e.printStackTrace();
                    return false;
                }
                if (value != null) {
                    if (!isValidMobile(value.toString())) {
                        return false;
                    }
                }
            }
        }
        return true;
    }

    private static boolean isValidMobile(String mobile) {
        Pattern pattern = Pattern.compile("^1[3-9]\\d{9}$");
        Matcher matcher = pattern.matcher(mobile);
        return matcher.matches();
    }
}

在上述代码中,我们定义了一个MobileValidator类,其中的validate方法接收一个对象作为参数,并通过反射机制遍历该对象的所有字段。对于被标记为Mobile注解的字段,我们获取其值,并通过正则表达式进行手机号的校验。

示例代码

接下来,我们将用一个示例代码来演示注解的使用。

public class User {
    @Mobile
    private String mobile;

    // Getters and setters
    // ...
}

public class Main {
    public static void main(String[] args) {
        User user1 = new User();
        user1.setMobile("13812345678");
        System.out.println("User1 mobile is valid: " + MobileValidator.validate(user1));

        User user2 = new User();
        user2.setMobile("123456789");
        System.out.println("User2 mobile is valid: " + MobileValidator.validate(user2));
    }
}

在上述示例代码中,我们创建了一个User类,并在其mobile字段上添加了Mobile注解。然后,我们创建了两个User对象,并为其设置不同的手机号。通过调用MobileValidator.validate方法,我们可以对手机号进行校验,并输出校验结果。

总结

通过使用Java注解来校验手机号,我们可以简化校验逻辑,并提高代码的可读性和可维护性。同时,我们可以灵活地定义校验失败时的错误提示信息,以满足具体的业务需求。希望本文能够帮助读者更好地理解和使用Java注解校验手机号的方法。

关系图

erDiagram
    User ||--o{ Mobile

甘特图

gantt
    title Mobile Validator Development

    section Design
    Define Requirements :done, des1, 2022-01-01,2022-01-05
    Design Architecture :done, des2, 2022-01-06,2022-01-10
    Define Data Models :done, des3, 2022-01-11,2022-01-15

    section Development
    Implement Mobile Annotation :done, dev1, 2022-01-16,2022-01-20
    Implement MobileValidator Class :done, dev2,