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

如何使用Skyve验证器校验非Bean属性值?批量上传员工邮箱验证

问题1:是否可以使用Skyve验证器(如邮箱验证器)测试不属于Bean属性的值?

可以。Skyve的验证器支持直接校验任意值,不需要绑定到Bean属性。你可以手动实例化目标验证器,调用其validate方法传入待校验值,即可获取校验结果。

示例代码:

// 实例化邮箱验证器
EmailValidator emailValidator = new EmailValidator();
// 传入待校验的字符串,第二个参数传null表示不关联Bean属性
ValidationResult result = emailValidator.validate("invalid-email", null);

// 处理校验结果
if (!result.isValid()) {
    // 执行校验失败后的逻辑,比如记录错误信息
}

问题2:使用transient document批量上传员工信息,如何在上传和处理时校验邮箱并发送提示消息?

可以分两个阶段实现:上传时的实时校验,以及处理后的结果通知。

1. 上传阶段的实时校验

在你的transient document类中重写validate方法,对每条上传记录的邮箱字段调用Skyve邮箱验证器做校验,错误信息会直接反馈给上传者:

@Override
public ValidationResult validate() {
    ValidationResult result = super.validate();
    
    // 假设批量上传的记录列表为employeeUploadItems
    for (EmployeeUploadItem item : getEmployeeUploadItems()) {
        if (StringUtils.isNotBlank(item.getEmail())) {
            EmailValidator validator = new EmailValidator();
            ValidationItem emailValidation = validator.validate(item.getEmail(), null);
            
            if (!emailValidation.isValid()) {
                result.addMessage(new ValidationMessage(
                    "记录[" + item.getEmployeeName() + "]的邮箱格式无效:" + item.getEmail(),
                    ValidationMessage.Level.error
                ));
            }
        }
    }
    
    return result;
}

2. 处理阶段的校验与结果通知

在处理上传记录的业务逻辑中,再次校验邮箱(或直接复用上传阶段的校验结果),收集无效记录后,通过Skyve的Notification类发送站内提示,或调用邮件服务发送邮件通知:

public void processEmployeeBatchUpload(EmployeeBatchUploadDoc uploadDoc, User currentUser) {
    List<String> invalidRecords = new ArrayList<>();
    
    for (EmployeeUploadItem item : uploadDoc.getEmployeeUploadItems()) {
        if (StringUtils.isNotBlank(item.getEmail())) {
            EmailValidator validator = new EmailValidator();
            ValidationItem result = validator.validate(item.getEmail(), null);
            
            if (!result.isValid()) {
                invalidRecords.add(String.format("姓名:%s,邮箱:%s", item.getEmployeeName(), item.getEmail()));
                continue; // 跳过无效记录,不进行后续处理
            }
        }
        
        // 处理有效记录的逻辑,比如保存到系统数据库
        saveEmployeeToSystem(item);
    }
    
    // 生成并发送提示消息
    String notificationTitle = "批量员工上传处理结果";
    String notificationContent;
    
    if (invalidRecords.isEmpty()) {
        notificationContent = "所有上传记录均处理成功!";
        Notification.send(currentUser, notificationTitle, notificationContent, Notification.Severity.info);
    } else {
        notificationContent = "以下记录因邮箱格式无效未处理:\n" + String.join("\n", invalidRecords);
        Notification.send(currentUser, notificationTitle, notificationContent, Notification.Severity.warning);
        
        // 如果需要发送邮件通知,可调用系统邮件服务
        // emailService.send(currentUser.getEmail(), notificationTitle, notificationContent);
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 05:37:09