java - Java 电子邮件:如何在保存和返回实体之前发送电子邮件?
问题描述
我正在创建一个帐户,然后发送一封包含密码的电子邮件。现在它首先发送电子邮件,然后保存用户。我该如何更改订单,因为退货后我无法使用电子邮件功能。
我该如何解决这个问题?我应该为这两个创建另一个函数吗?
public WorkDetail setWorkerData(PatchWorkerRequest request, User user, WorkDetail workDetail) {
if (request.getName() != null) {
user.setName(request.getName());
}
if (request.getIdCode() != null) {
user.setIdCode(request.getIdCode());
}
if (request.getEmail() != null) {
user.setEmail(request.getEmail());
}
if (request.getPhone() != null) {
user.setPhone(request.getPhone());
}
if (request.getStatus() != null) {
user.setStatus(request.getStatus());
}
// Work details
if (request.getJobRelation() != null) {
workDetail.setJobRelation(request.getJobRelation());
}
if (request.getSalary() != null) {
workDetail.setSalary(request.getSalary());
}
if (request.getDistricts() != null) {
workDetail.setDistricts(request.getDistricts());
}
if (request.getCompetences() != null) {
workDetail.setCompetences(request.getCompetences());
}
workDetail = workDetailRepository.save(workDetail);
user.setWorkDetail(workDetail);
workDetail.setUser(user);
return workDetailRepository.save(workDetail);
}
public WorkDetail createWorker(PatchWorkerRequest request) {
WorkDetail workDetail = new WorkDetail();
User user = new User();
String generatedPassword = userService.generatePassword(8);
user.setPassword(passwordEncoder.encode(generatedPassword));
emailService.sendMail("SYDA", new String[]{request.getEmail()},
"SYDA: teile loodi kasutaja",
"Teile loodi SYDA süsteemi kasutaja. Teie parool on: " + generatedPassword +
"\nSisse saate logida kasutades emaili: " + request.getEmail());
return this.setWorkerData(request, user, workDetail);
}
解决方案
代替
emailService.sendMail("SYDA", new String[]{request.getEmail()},
"SYDA: teile loodi kasutaja",
"Teile loodi SYDA süsteemi kasutaja. Teie parool on: " + generatedPassword +
"\nSisse saate logida kasutades emaili: " + request.getEmail());
return this.setWorkerData(request, user, workDetail);
写
WorkDetail workDetailSaved = this.setWorkerData(request, user, workDetail);
emailService.sendMail("SYDA", new String[]{request.getEmail()},
"SYDA: teile loodi kasutaja",
"Teile loodi SYDA süsteemi kasutaja. Teie parool on: " + generatedPassword +
"\nSisse saate logida kasutades emaili: " + request.getEmail());
return workDetailSaved;
(由 Stultuske 提议)
顺便说一句:我会完全重写“setWorkerData(request,user,workDetail)”方法并将其重命名为“buildWorkDetail(request,user)”,它只创建一个 WorkDetail 实例。此外,我会从那里删除“保存”部分,并在创建 WorkDetail 后执行此操作。
例子:
public WorkDetail createWorker(PatchWorkerRequest request) {
User user = buildUser(request); // builds a new User-instance from the request
String generatedPassword = userService.generatePassword(8);
user.setPassword(passwordEncoder.encode(generatedPassword));
WorkDetail workDetail = buildWorkDetail(request, user); // builds a new WorkDetail-instance from the request
workDetail.setUser(user);
workDetailRepository.save(workDetail);
user.setWorkDetail(workDetail);
emailService.sendMail("SYDA", new String[]{request.getEmail()},
"...",
"...);
return workDetail;
}
推荐阅读
- jquery - 无法将我的 jQuery 转换为在 MVC Core 中获取 AJAX 请求
- c++ - sched_setaffinity() 对新线程的影响
- javascript - 具有 react-hook-form 逻辑的可重用输入文件
- ios - 构建失败:如何解决 React Native iOS 虚拟设备应用构建失败、CompileSwift 和 CompileC 失败?
- node.js - 在 mac 中更新 Angular CLI 时面临问题
- gitlab-ci - 部署时 CD gitlab 作业的问题
- prolog - Swi-Prolog 中的 \= 是什么
- java - java - 如何在使用stream()迭代列表时将值附加到java中的字符串
- vue.js - Vuetify 日历与 0 分钟事件相互重叠
- html - 没有提交按钮的表单仍然提交?