package com.baeldung.config; import org.springframework.boot.web.server.WebServerFactoryCustomizer; import org.springframework.boot.web.servlet.server.ConfigurableServletWebServerFactory; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.ViewResolver; import org.springframework.web.servlet.config.annotation.EnableWebMvc; import org.springframework.web.servlet.view.InternalResourceViewResolver; import org.springframework.web.servlet.view.JstlView; import org.thymeleaf.spring5.SpringTemplateEngine; import org.thymeleaf.spring5.templateresolver.SpringResourceTemplateResolver; import org.thymeleaf.spring5.view.ThymeleafViewResolver; import org.thymeleaf.templatemode.TemplateMode; import org.thymeleaf.templateresolver.ClassLoaderTemplateResolver; import org.thymeleaf.templateresolver.ITemplateResolver; import com.baeldung.contexts.Greeting; import com.fasterxml.jackson.databind.ObjectMapper; /** * Web Configuration for the entire app */ @Configuration @EnableWebMvc public class WebConfig { @Bean public WebServerFactoryCustomizer enableDefaultServlet() { return factory -> factory.setRegisterDefaultServlet(true); } @Bean public Greeting greeting() { Greeting greeting = new Greeting(); greeting.setMessage("Hello World !!"); return greeting; } @Bean public ObjectMapper objectMapper() { return new ObjectMapper(); } // Thymeleaf configuration @Bean public ViewResolver thymeleafViewResolver() { ThymeleafViewResolver viewResolver = new ThymeleafViewResolver(); viewResolver.setTemplateEngine(thymeleafTemplateEngine()); viewResolver.setCharacterEncoding("UTF-8"); viewResolver.setOrder(0); return viewResolver; } // Thymeleaf template engine with Spring integration @Bean public SpringTemplateEngine thymeleafTemplateEngine() { SpringTemplateEngine templateEngine = new SpringTemplateEngine(); templateEngine.setTemplateResolver(thymeleafTemplateResolver()); templateEngine.setEnableSpringELCompiler(true); return templateEngine; } @Bean public SpringResourceTemplateResolver springResourceTemplateResolver() { return new SpringResourceTemplateResolver(); } @Bean public ITemplateResolver thymeleafTemplateResolver() { ClassLoaderTemplateResolver templateResolver = new ClassLoaderTemplateResolver(); templateResolver.setPrefix("/templates/"); templateResolver.setCacheable(false); templateResolver.setSuffix(".html"); templateResolver.setTemplateMode(TemplateMode.HTML); templateResolver.setCharacterEncoding("UTF-8"); return templateResolver; } }