You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为ContactDTO编写创建联系人时的字段校验逻辑:手机号仅数字、邮箱可含字符

实现ContactDTO的创建校验逻辑

1. 定义枚举类型ContactType

public enum ContactType {
    EMAIL, PHONENUMBER
}

2. 实现ContactDTO类及校验逻辑

直接在DTO类中添加校验方法,创建联系人时调用即可完成规则校验:

public class ContactDTO {
    private ContactType contactType;
    private String contactValue;
    private Long studentId;

    // 构造方法、Getter/Setter方法根据业务需求实现

    /**
     * 创建联系人时的校验方法
     * @throws IllegalArgumentException 校验不通过时抛出异常
     */
    public void validate() throws IllegalArgumentException {
        // 基础非空校验
        if (contactType == null) {
            throw new IllegalArgumentException("联系人类型不能为空");
        }
        if (contactValue == null || contactValue.trim().isEmpty()) {
            throw new IllegalArgumentException("联系人值不能为空");
        }

        // 按类型执行对应校验
        switch (contactType) {
            case PHONENUMBER:
                // 校验是否仅包含数字
                if (!contactValue.matches("^\\d+$")) {
                    throw new IllegalArgumentException("电话号码必须仅含数字");
                }
                break;
            case EMAIL:
                // 若需要校验邮箱格式,可添加正则判断(示例为通用邮箱格式校验)
                if (!contactValue.matches("^[A-Za-z0-9+_.-]+@[A-Za-z0-9.-]+$")) {
                    throw new IllegalArgumentException("邮箱格式不符合要求");
                }
                break;
            default:
                throw new IllegalArgumentException("不支持的联系人类型");
        }
    }
}

3. 校验方法的使用示例

在创建联系人的业务逻辑中,先调用校验方法,通过后再执行后续创建操作:

// 构造ContactDTO实例
ContactDTO contact = new ContactDTO();
contact.setContactType(ContactType.PHONENUMBER);
contact.setContactValue("13800138000");
contact.setStudentId(123456L);

try {
    // 执行校验
    contact.validate();
    // 校验通过,执行联系人创建逻辑
    System.out.println("校验通过,开始创建联系人");
} catch (IllegalArgumentException e) {
    // 处理校验失败的情况
    System.err.println("创建失败:" + e.getMessage());
}

可选:抽离校验逻辑到工具类

如果希望保持DTO的单一职责,可以把校验逻辑单独抽成工具类:

public class ContactValidator {
    public static void validate(ContactDTO contact) throws IllegalArgumentException {
        if (contact.getContactType() == null) {
            throw new IllegalArgumentException("联系人类型不能为空");
        }
        String value = contact.getContactValue();
        if (value == null || value.trim().isEmpty()) {
            throw new IllegalArgumentException("联系人值不能为空");
        }

        switch (contact.getContactType()) {
            case PHONENUMBER:
                if (!value.matches("^\\d+$")) {
                    throw new IllegalArgumentException("电话号码必须仅含数字");
                }
                break;
            case EMAIL:
                // 可根据需求选择是否添加邮箱格式校验
                break;
            default:
                throw new IllegalArgumentException("不支持的联系人类型");
        }
    }
}

使用时直接调用工具类方法:

try {
    ContactValidator.validate(contact);
    // 校验通过,执行创建逻辑
} catch (IllegalArgumentException e) {
    // 处理校验失败
}

内容的提问来源于stack exchange,提问作者user20572341

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 12:27:51