I have the following project structure in my Spring boot app, in which I want to use Thymeleaf
projectName -Gradle-Module1(Spring boot module) -build -src -main -resources -templates index.html build.gradle -Gradle-Module2 ... build.gradle ...
but the spring-boot cannot find my template directory and is showing warning
Cannot find template location: classpath:/templates/ (please add some templates or check your Thymeleaf configuration)
PS: I am using @EnableAutoConfiguration
In my controller code I am doing something like:
@Controller @EnableAutoConfiguration public class BaseController { @RequestMapping(value = "/") public String index() { return "index.html"; } }
and index.html
file just prints hello world.
So typically it should look inside src/resources/templates/
(of same Gradle module I suppose), but somehow it is not able to find it.
When I try to access localhost:8080
I am getting below error
Error resolving template “index.html”, template might not exist or might not be accessible by any of the configured Template Resolvers`
Is there anything I am missing?
Any pointers appreciated. Thanks.
Advertisement
Answer
You have to configure Thymeleaf as follows:
@Configuration public class ThymeleafConfig { @Bean public SpringResourceTemplateResolver templateResolver() { SpringResourceTemplateResolver templateResolver = new SpringResourceTemplateResolver(); templateResolver.setCacheable(false); templateResolver.setPrefix("classpath:/templates/"); templateResolver.setSuffix(".html"); return templateResolver; } @Bean public SpringTemplateEngine templateEngine() { SpringTemplateEngine springTemplateEngine = new SpringTemplateEngine(); springTemplateEngine.addTemplateResolver(templateResolver()); return springTemplateEngine; } @Bean public ThymeleafViewResolver viewResolver() { ThymeleafViewResolver viewResolver = new ThymeleafViewResolver(); viewResolver.setTemplateEngine(templateEngine()); viewResolver.setOrder(1); return viewResolver; } }
Spring doc recommends to add @EnableAutoConfiguration
annotation to your primary @Configuration
class.
Also it seems you have wrong project structure, the typical package hierarchy is:
src |- main |- java |- resources |- static |- templates |- test
In this case your templates will be in src/main/resources/templates
, not in src/resources/templates/
.