我正在开发一个springboot应用程序,以生成一封pdf格式的电子邮件。我需要显示文档创建服务返回的错误消息异常。如果异常处理程序捕获到异常,文档服务(和电子邮件服务)将返回一条消息,当它返回错误时,将错误传递给错误电子邮件代码并将其包含在电子邮件正文中。最后我想测试一下。
控制器类
Model.addAttribute("permit", permit);
model.addAttribute("success", "Success! Permit for " + permit.getReceipt() + " sent. ");
Map<String, String> result = documentServiceImpl.generatePdf(permit);
if (documentServiceImpl.STATUS_SUCCESS.equals(result.get("status"))) {
model.addAttribute("date", result.get("date"));
String emailBody = getEmailBody(permit);
Map<String, String> emailResult = emailServiceImpl.sendRequestoremail(permit.getEmail(), emailBody, result.get("file"));
documentServiceImpl.deletePdf(result.get("file"));
if (emailServiceImpl.STATUS_ERROR.equals(emailResult.get("status"))) {
String errorE = emailResult.get("message");
String errorEmail = getErrorEmail(errorE);
Map<String,String> financeEmail = emailServiceImpl.sendFinanceEmail(permit.getEmail(), errorEmail);
model.addAttribute("errorEmail", "Received response for the Temporary Parking Permit script but there was an error " + financeEmail);
}
}
// String body = getEmailBody(permit);
System.out.println(result.get("status"));
System.out.println(result.get("file"));
} catch (Exception e) {
model.addAttribute("error", e.getMessage());
}
return "permit";
}
private String getEmailBody( Permit permit) {
ClassLoaderTemplateResolver templateResolver = new ClassLoaderTemplateResolver();
templateResolver.setSuffix(".html");
templateResolver.setTemplateMode(TemplateMode.HTML);
templateResolver.setPrefix("templates/");
TemplateEngine templateEngine = new TemplateEngine();
templateEngine.setTemplateResolver(templateResolver);
Context context = new Context();
context.setVariable("permit", permit);
return templateEngine.process("email" , context);
}
private String getErrorEmail(String permit) {
ClassLoaderTemplateResolver templateResolver = new ClassLoaderTemplateResolver();
templateResolver.setSuffix(".html");
templateResolver.setTemplateMode(TemplateMode.HTML);
templateResolver.setPrefix("templates/");
TemplateEngine templateEngine = new TemplateEngine();
templateEngine.setTemplateResolver(templateResolver);
Context context = new Context();
context.setVariable("permit", permit);
return templateEngine.process("emailError" , context);
}
}
文档服务
@Override
public Map<String, String> generatePdf(Permit permit) {
Map<String, String> result = new HashMap<>();
currentDate = getCurrentDate("dd MMMM uuuu");
String fileName = null;
try {
Path outputPath = Paths.get(tmp + File.separator + "parking");
Files.createDirectories(outputPath);
fileName = outputPath + File.separator + permit.getCustomerNum() + permit.getPurchaseDate().replaceAll("[^a-zA-Z]", "") + getCurrentDate("uuuuMMddHHmmss") + ".pdf";
InputStream pdfTemplate = resourceFile.getInputStream();
PDDocument pdfDoc = PDDocument.load(pdfTemplate);
PDDocumentCatalog docCatalog = pdfDoc.getDocumentCatalog();
PDAcroForm form = docCatalog.getAcroForm();
form.getField("Receipt").setValue(permit.getReceipt());
form.getField("PermitType").setValue(permit.getPermitType());
form.getField("PurchaseDate").setValue(permit.getPurchaseDate());
form.getField("MakeModel").setValue(permit.getMake() + " " + permit.getCarModel());
// form.getField("Model").setValue(permit.getCarModel());
form.getField("Rego").setValue(permit.getCarRego());
form.flatten();
System.out.println("generatePdf: " + fileName);
File output = new File(fileName);
pdfDoc.save(output);
pdfDoc.close();
result.put("status" , STATUS_SUCCESS);
result.put("file", fileName);
result.put("date", currentDate);
} catch (Exception e) {
result.put("status", STATUS_ERROR);
result.put("file", fileName);
result.put("date", currentDate);
result.put("message", e.getMessage());
e.printStackTrace();
}
return result;
}