【问题标题】:Spring thymeleaf template engine cannot find the template fileSpring thymeleaf 模板引擎找不到模板文件
【发布时间】:2020-08-27 20:13:51
【问题描述】:

我正在尝试使用 spring boot 和 thymeleaf 发送内联电子邮件。我添加了新的模板文件“test-email.html”

我有以下 bean 配置

@Qualifier("emailSender")
@Autowired
private val templateEngine: SpringTemplateEngine? = null

@Bean(name = ["emailSender"])
fun springTemplateEngine(): SpringTemplateEngine? {
    val templateEngine = SpringTemplateEngine()
    templateEngine.addTemplateResolver(htmlTemplateResolver())
    return templateEngine
}

@Bean
fun htmlTemplateResolver(): SpringResourceTemplateResolver? {
    val emailTemplateResolver = SpringResourceTemplateResolver()
    emailTemplateResolver.prefix = "/templates/email/"
    emailTemplateResolver.suffix = ".html"
    emailTemplateResolver.templateMode = TemplateMode.HTML
    emailTemplateResolver.characterEncoding = StandardCharsets.UTF_8.name()
    return emailTemplateResolver
}

以下函数用于发送解析模板和发送电子邮件。

fun sendTemplateMessage(to: String, subject: String, text: String) {
    val mimeMessage: MimeMessage? = emailSender?.createMimeMessage()
    val helper = mimeMessage?.let { MimeMessageHelper(it, "utf-8") }

    val context = Context()
    context.setVariable("msg", "This is test message")


    val htmlMsg = templateEngine!!.process("test-email", context)
    helper?.setText(htmlMsg, true)

    helper?.setTo(to)
    helper?.setSubject(subject)
    emailSender?.send(mimeMessage)
}

但这给出了 FileNotFound 异常。

原因:java.io.FileNotFoundException: ReactiveWebContext 资源 [/templates/email/test-email.html] 无法打开,因为它不存在

如何向模板引擎提供模板文件路径?

【问题讨论】:

  • emailTemplateResolver.prefix的值加上classpath:后可以试试吗。所以最终值就像"classpath:/templates/email/"
  • @Saurabh 是的,它奏效了!谢谢
  • 那么让我添加它作为答案。

标签: spring-boot thymeleaf


【解决方案1】:

添加classpath: 作为文件路径的前缀。背后的原因是它将采用 jar 部署位置的相对路径,否则它将把给定路径视为绝对路径。

所以改变你的代码如下:

@Bean
fun htmlTemplateResolver(): SpringResourceTemplateResolver? {
    val emailTemplateResolver = SpringResourceTemplateResolver()
    emailTemplateResolver.prefix = "classpath:/templates/email/"
    emailTemplateResolver.suffix = ".html"
    emailTemplateResolver.templateMode = TemplateMode.HTML
    emailTemplateResolver.characterEncoding = StandardCharsets.UTF_8.name()
    return emailTemplateResolver
}

【讨论】:

    猜你喜欢
    • 2019-04-05
    • 1970-01-01
    • 2020-10-30
    • 1970-01-01
    • 2017-06-21
    • 1970-01-01
    • 2015-12-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多