如何为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
相关产品推荐
相关产品推荐

