有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java当Spring引导打包jar时,Thymeleaf不会加载模板

我遇到了一个关于堆栈溢出的错误,我已经见过多次了,但是没有一个解决方案适合我

基本上,我使用Thymeleaf 3运行Spring Boot 4,当我使用进行本地测试时,我的模板加载很好/格雷德卢·布特伦

但是,当我打包jar并尝试运行它时,当我访问端点时,总是会出现以下错误:

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.thymeleaf.exceptions.TemplateInputException: Error resolving template "/login", template might not exist or might not be accessible by any of the configured Template Resolvers

我的模板都位于src/main/resources/templates/下,并且是以结尾的文件。html,例如登录。html

这是我的@Configuration类,用于为Thymeleaf配置模板解析器:

@Configuration
@EnableWebMvc
@ComponentScan
public class TemplateConfig extends WebMvcConfigurerAdapter {

    @Bean
    @Description("Thymeleaf template resolver serving HTML 5")
    public ClassLoaderTemplateResolver templateResolverClassLoader() {

        ClassLoaderTemplateResolver templateResolver = new ClassLoaderTemplateResolver();

        templateResolver.setPrefix("templates/");
        templateResolver.setCacheable(false);
        templateResolver.setSuffix(".html");
        templateResolver.setTemplateMode("HTML5");
        templateResolver.setCharacterEncoding("UTF-8");
        templateResolver.setOrder(2);

        return templateResolver;
    }

    @Bean
    public ServletContextTemplateResolver templateResolverServletContext() {
        final ServletContextTemplateResolver templateResolver = new ServletContextTemplateResolver();
        templateResolver.setPrefix("/WEB-INF/templates/");
        templateResolver.setSuffix(".html");
        templateResolver.setTemplateMode("HTML5");
        templateResolver.setCharacterEncoding("UTF-8");
        templateResolver.setCacheable(false);
        return templateResolver;
    }

    @Bean
    @Description("Thymeleaf template engine with Spring integration")
    public SpringTemplateEngine templateEngine() {

        SpringTemplateEngine templateEngine = new SpringTemplateEngine();

        final Set<TemplateResolver> templateResolvers = new HashSet<>();
        templateResolvers.add(templateResolverClassLoader());
        templateResolvers.add(templateResolverServletContext());
        templateEngine.setTemplateResolvers(templateResolvers);

        return templateEngine;
    }

    @Bean
    @Description("Thymeleaf view resolver")
    public ViewResolver viewResolver() {

        ThymeleafViewResolver viewResolver = new ThymeleafViewResolver();

        viewResolver.setTemplateEngine(templateEngine());
        viewResolver.setCharacterEncoding("UTF-8");

        return viewResolver;
    }

}

此外,如果我删除了上面的整个@Configuration类,它仍然会有相同的错误

我的身体里总是有胸腺素的东西。格拉德尔

compile("org.springframework.boot:spring-boot-starter-thymeleaf")

我错过了什么?谢谢


共 (1) 个答案

  1. # 1 楼答案

    我没有和Gradle合作过,但是我会考虑一些点,帮助其他用户。 Spring Bug的版本在配置上几乎没有差异,所以对于这个答案,考虑Spring Boo1.5.10。p>
    1. 由于Spring引导使用“约定优先于配置”工作,所以要使thymeleaf正常工作,只需在pom中添加正确的依赖项。xml(适用于maven):
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>;
    

    有了这个依赖项,thymeleaf就可以在资源/模板中查找html了

    1. 确保您的Spring boot entry应用程序类具有正确的注释,例如:
        @SpringBootApplication
        @EntityScan(basePackageClasses = { Application.class })
        public class Application
        {    
            public static void main(String[] args)
            {
                SpringApplication.run(Application.class, args);
            }
        }
    
    1. 如果不想缓存模板,请在属性或yaml文件中通知

      春天。百里香。cache=false