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

如何为List<String>类型的邮箱列表配置@Pattern校验规则

校验List类型的邮箱列表(仅允许@gmail.com结尾)

针对List类型的邮箱集合,不能直接给List字段加@Pattern,可通过以下两种方案实现每个元素的校验:

方案1:自定义列表校验注解(兼容多数Spring环境)

1. 定义校验注解

import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.*;

@Target({ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = ValidGmailListValidator.class)
public @interface ValidGmailList {
    String message() default "所有邮箱必须以@gmail.com结尾";
    Class<?>[] groups() default {};
    Class<? extends Payload>[] payload() default {};
}

2. 实现校验器逻辑

import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
import java.util.List;
import java.util.regex.Pattern;

public class ValidGmailListValidator implements ConstraintValidator<ValidGmailList, List<String>> {
    private static final Pattern GMAIL_REGEX = Pattern.compile("^.+@gmail\\.com$");

    @Override
    public boolean isValid(List<String> emails, ConstraintValidatorContext context) {
        if (emails == null) {
            // 允许空列表则返回true,否则返回false,按需调整
            return true;
        }
        return emails.stream()
                .allMatch(email -> email != null && GMAIL_REGEX.matcher(email).matches());
    }
}

3. 在实体类中使用

import javax.validation.constraints.NotEmpty;
import java.util.List;

public class EmailBatchRequest {
    @NotEmpty(message = "邮箱列表不能为空")
    @ValidGmailList
    private List<String> emails;

    // getter、setter方法
}

方案2:利用类型参数校验(JSR-380 2.0+ 原生支持)

如果你的校验框架是Hibernate Validator 6.0及以上版本,支持直接校验泛型元素,代码更简洁:

import javax.validation.Valid;
import javax.validation.constraints.Pattern;
import java.util.List;

public class EmailBatchRequest {
    @Valid
    private List<@Pattern(
            regexp = "^.+@gmail\\.com$",
            message = "单个邮箱必须以@gmail.com结尾"
    ) String> emails;

    // getter、setter方法
}

注意事项

  • 正则表达式^.+@gmail\\.com$确保邮箱严格以@gmail.com结尾,\\.是转义后的点号,避免匹配任意字符。
  • 若要禁止空字符串,可在方案1的校验逻辑中添加!email.isBlank()判断,或方案2中给泛型String添加@NotBlank注解。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 22:40:27