我正在开发一个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; }