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