package de.codecentric.moviedatabase.navigation; import java.io.InputStream; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.thymeleaf.ThymeleafAutoConfiguration; import org.springframework.boot.autoconfigure.thymeleaf.ThymeleafProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.thymeleaf.TemplateProcessingParameters; import org.thymeleaf.resourceresolver.IResourceResolver; import org.thymeleaf.spring4.resourceresolver.SpringResourceResourceResolver; import org.thymeleaf.templateresolver.ITemplateResolver; import org.thymeleaf.templateresolver.TemplateResolver; @Configuration public class FallbackNavigationConfiguration { @Autowired private ThymeleafProperties properties; @Autowired private SpringResourceResourceResolver springResourceResourceResolver; /** * This bean gets picked up automatically by {@link ThymeleafAutoConfiguration}. */ @Bean public ITemplateResolver navigationTemplateResolver() { TemplateResolver resolver = new TemplateResolver(); resolver.setOrder(30); resolver.setResourceResolver(navigationResourceResolver()); resolver.setPrefix(this.properties.getPrefix()); resolver.setSuffix(this.properties.getSuffix()); resolver.setTemplateMode(this.properties.getMode()); resolver.setCharacterEncoding(this.properties.getEncoding()); resolver.setCacheable(this.properties.isCache()); return resolver; } @Bean public IResourceResolver navigationResourceResolver(){ return new IResourceResolver() { @Override public InputStream getResourceAsStream( TemplateProcessingParameters templateProcessingParameters, String resourceName) { if (resourceName.contains("navigation")){ return springResourceResourceResolver.getResourceAsStream(templateProcessingParameters, "classpath:templates/navigation.html"); } else { return null; } } @Override public String getName() { return "navigationResourceResolver"; } }; } }