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

