无法从服务中识别属性

dba5bblo  于 2021-06-29  发布在  Java
关注(0)|答案(2)|浏览(311)

我正在处理两个电子邮件模板,一个将发送一个确认url来验证用户的帐户,另一个将发送一个重置密码链接。
激活帐户

<p>Use <a th:href="${confirmationUrl}" target="_blank" rel="noopener">this link</a> to activate your account now</p>

重置密码

<a th:href="${resetPasswordUrl}" target="_blank">Reset password</a>

两个链接都接收 th:href 来自以下方法的属性:
此方法发送验证令牌链接以激活帐户

public void sendVerificationToken(User user) {
    String token = jwtTokenService.genEmailVerificationToken(user.getId());
    logger.info("Sending verification token to user. user={} email={} token={}",
            user.getId(), user.getEmail(), token);
    String confirmationUrl = null;
    try {
        confirmationUrl = new URIBuilder(verifyEmailUrl)
                .addParameter(VERIFY_EMAIL_ENDPOINT_PARAM, token)
                .build().toString();
        model.addAttribute("confirmationUrl", confirmationUrl);
    }

    catch (URISyntaxException e) {
        logger.error("URL stored as redirect url for verify email is not valid.");
        throw ErrorFactory.serverError("Error");
    }
    emailService.sendAccountConfirmationEmail(user.getEmail(), confirmationUrl);
}

此方法发送密码重置链接

public void resetPasswordRequest(User user) {
    logger.info("Request for password recovery. email={}",
            user.getEmail());
    String token = jwtTokenService.genPasswordResetToken(user.getId());
    String resetPasswordUrl = null;
    try {
        resetPasswordUrl = new URIBuilder(resetPasswordUrl)
                .addParameter(RESET_PASS_ENDPOINT_PARAM, token)
                .build().toString();
        model.addAttribute("resetPasswordUrl", resetPasswordUrl);
    }
    catch (URISyntaxException e) {
        logger.error("URL stored as target url for reset password email is not valid.");
        throw ErrorFactory.serverError("Error");
    }
    emailService.sendPasswordReset(user.getEmail(), resetPasswordUrl);
}

我试图得到 confirmationUrl 以及 resetPasswordUrl 在html模板中使用的方法是将model param声明为这两个方法之上的类级属性,然后使用 model.addAttribute("attributeName", attribute) .

private Model model;

但不知为什么,我 Cannot resolve 'resetPasswordUrl' 以及 Cannot resolve 'confirmationUrl' 在模板文件上。好像它不认识属性。

qcuzuvrc

qcuzuvrc1#

我同意@srinivasa raghavan所说的。我认为没有必要在邮寄步骤中使用模型对象。
1.如果发送确认url的方法是这样的,那就足够了。您可以调整示例代码以使其更通用。

public void sendAccountConfirmationEmail(String recipient, String confirmationUrl) {

        Context context = new Context();
        context.setVariable("confirmationUrl", confirmationUrl);

        MimeMessagePreparator mimeMessagePreparator = mimeMessage -> {
            MimeMessageHelper messageHelper = new MimeMessageHelper(mimeMessage, "UTF-8");
            messageHelper.setFrom("Test <test@test.com>");
            messageHelper.setTo(recipient);
            messageHelper.setSubject("Active Account");
            String content = templateEngine.process("your_active_account.html", context);            
            messageHelper.setText(content, true);
        };

        mailSender.send(mimeMessagePreparator);
    }

2.为了处理我们的模板,您将在我们的spring email配置中配置一个专门为电子邮件处理配置的templateengine。您可以参考thymeleaf文档来创建 TemplateEngine .

vcudknz3

vcudknz32#

您是否将模型对象注入到html模板中?因为我在你的问题上看不出来。
使用 SpringTemplateEngine 并以这种方式注入模板变量:

Map<String, Object> variable = objectMapper.convertValue(yourModelObject, Map.class);
Context context = new Context(); //org.thymeleaf.context.Context class
context.setVariables(variable);
html = springTemplateEngine.process("your_template_name", context);

相关问题