Reputation: 1197
I'm migrating an existing application to Spring 5.0.0.M3 & Spring Boot 2.0.0.M3. With Spring Boot I'm also importing the Thymeleaf starter.
The application has 2 template folders mails
and templates
. If I specify the below configuration for email templates, the templates
folder is ignored; e.g. I'm getting FileNotFoundException
for templates in this folder.
@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;
}
}
I've tried setting the setOrder
parameter to 2, 10, etc. which made no difference. If I remove the resolver method, the templates
folder is recognized, but the mails
folder isn't.
Any ideas what might be going on?
Upvotes: 2
Views: 2027
Reputation: 1964
What I understand is you have mails and templates sub-folders under the resources folder.
You can add resource folder as the prefix in your ClassLoaderTemplateResolver. Then add ResourceHandler for both mails and templates sub-folders.
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;
}
Place your ResourceHandler method in your application class, which your have annotated with @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/");
}
}
When you return your view name from any method, it can be like:
return "mails/page1";
or
return "templates/page2";
Upvotes: 2