Spring Boot 2 Thymeleaf配置忽略'模板'

时间:2017-09-29 05:49:46

标签: spring spring-boot thymeleaf

我将现有应用程序迁移到Spring 5.0.0.M3& Spring Boot 2.0.0.M3。使用Spring Boot,我也可以导入Thymeleaf启动器。

该应用程序有2个模板文件夹mailstemplates。如果我为电子邮件模板指定以下配置,则忽略templates文件夹;例如我在此文件夹中获取了FileNotFoundException个模板。

@Configuration
public class ThymeleafConfiguration {

    @SuppressWarnings("unused")
    private final Logger log = LoggerFactory.getLogger(ThymeleafConfiguration.class);

    @Bean
    @Description("Thymeleaf template resolver serving HTML 5 emails")
    public ClassLoaderTemplateResolver emailTemplateResolver() {
        ClassLoaderTemplateResolver emailTemplateResolver = new ClassLoaderTemplateResolver();
        emailTemplateResolver.setPrefix("mails/");
        emailTemplateResolver.setSuffix(".html");
        emailTemplateResolver.setTemplateMode("HTML5");
        emailTemplateResolver.setCharacterEncoding(CharEncoding.UTF_8);
        emailTemplateResolver.setOrder(1);
        return emailTemplateResolver;
    }
}

我已尝试将setOrder参数设置为2,10等,这没有任何区别。如果我删除了解析程序方法,则会识别templates文件夹,但mails文件夹不是。

有什么想法可能会发生什么?

1 个答案:

答案 0 :(得分:1)

据我所知,您在 resources 文件夹下有邮件模板子文件夹。

您可以在 ClassLoaderTemplateResolver 中添加 resource 文件夹作为前缀。然后为邮件模板子文件夹添加 ResourceHandler

<强> ClassLoaderTemplateResolver

 @Bean
 @Description("Thymeleaf template resolver serving HTML 5 emails")
 public ClassLoaderTemplateResolver emailTemplateResolver() {
     ClassLoaderTemplateResolver emailTemplateResolver = new 
     ClassLoaderTemplateResolver();
     emailTemplateResolver.setPrefix("resources/");
     emailTemplateResolver.setSuffix(".html");
     emailTemplateResolver.setTemplateMode("HTML5");
     emailTemplateResolver.setCharacterEncoding(CharEncoding.UTF_8);
     emailTemplateResolver.setOrder(1);
     return emailTemplateResolver;
}

将您的ResourceHandler方法放在您的应用程序类中,该类已使用 @SpringBootApplication 进行注释。

<强> ResourceHandler

public void addResourceHandlers(ResourceHandlerRegistry registry) {
    if (!registry.hasMappingForPattern("/mails/**")) {
        registry.addResourceHandler("/mails/**").addResourceLocations("classpath:/resources/mails/");
    }
    if (!registry.hasMappingForPattern("/templates/**")) {
        registry.addResourceHandler("/templates/**").addResourceLocations("classpath:/resources/templates/");
    }
}

当您从任何方法返回视图名称时,它可能类似于:

return "mails/page1"; 

return "templates/page2";