Spring Thymeleaf TemplateResolver error

java, spring, spring-mvc, template-engine, thymeleaf

Solution

You need to use ClassLoaderTemplateResolver. Your templateResolver() method should be like below.

@Bean
public TemplateResolver templateResolver() {
        TemplateResolver templateResolver = new ClassLoaderTemplateResolver();
        templateResolver.setPrefix("templates/");
        templateResolver.setCacheable(false);
        templateResolver.setSuffix(".html");
        templateResolver.setTemplateMode("HTML5");
        return templateResolver;
    }

Problem

I am trying to use thymeleaf in spring for localization of text strings. My html templates are in /src/main/resources/templates/ So I have: ``` @Configuration @EnableWebMvc public class MvcConfig extends WebMvcConfigurerAdapter { public MvcConfig() { super(); } @Override public void addViewControllers(final ViewControllerRegistry registry) { super.addViewControllers(registry); registry.addViewController("/").setViewName("index"); registry.addViewController("/sorting").setViewName("sorting"); } @Override public void configureDefaultServletHandling(final DefaultServletHandlerConfigurer configurer) { configurer.enable(); } @Override public void addResourceHandlers(final ResourceHandlerRegistry registry) { registry.addResourceHandler("/resources/**").addResourceLocations("/", "/resources/","/resource/*"); registry.addResourceHandler("/assets/**") .addResourceLocations("classpath:/assets/"); registry.addResourceHandler("/css/**") .addResourceLocations("/css/"); } @Bean public ServletContextTemplateResolver templateResolver() { ServletContextTemplateResolver templateResolver = new ServletContextTemplateResolver(); templateResolver.setCacheable(false); templateResolver.setPrefix("classpath:/templates/"); templateResolver.setSuffix(".html"); templateResolver.setTemplateMode("HTML5"); return templateResolver; } @Bean public SpringTemplateEngine templateEngine() { SpringTemplateEngine templateEngine = new SpringTemplateEngine(); templateEngine.setTemplateResolver(templateResolver()); return templateEngine; } @Bean public ViewResolver viewResolver() { ThymeleafViewResolver viewResolver = new ThymeleafViewResolver(); viewResolver.setTemplateEngine(templateEngine()); viewResolver.setCharacterEncoding("UTF-8"); viewResolver.setOrder(1); return viewResolver; } } ``` However the template resolver cannot find my templates and I get an error message saying: Error resolving template "index", template might not exist or might not be accessible by any of the configured Template Resolvers I suspect that this is due to an incorrect path in the line: `templateResolver.setPrefix("classpath:/templates/");` but am unable to find what prefix should go there. It seems that most examples put templates under WEB-INF. Is this the recommended way which I should follow as well?

Original source