You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置Spring与Thymeleaf将模板存放在类所在同包路径下

实现Thymeleaf模板与业务类同包存放的配置方案

要实现Thymeleaf模板和对应业务类存放在同一包路径下,按以下步骤配置即可:


1. Spring & Thymeleaf 视图解析配置

场景1:Spring Boot 项目

直接在application.yml或application.properties中修改Thymeleaf默认前缀即可:

# application.yml 配置示例
spring:
  thymeleaf:
    # 前缀指向业务代码根包的类路径
    prefix: classpath:/com/example/myapp/
    suffix: .html
    mode: HTML
    encoding: UTF-8

如果是properties格式:

# application.properties 配置示例
spring.thymeleaf.prefix=classpath:/com/example/myapp/
spring.thymeleaf.suffix=.html
spring.thymeleaf.mode=HTML
spring.thymeleaf.encoding=UTF-8

场景2:非Spring Boot的Spring MVC项目

手动注册Thymeleaf相关组件的配置类如下:

@Configuration
public class ThymeleafCustomConfig {
    @Bean
    public SpringResourceTemplateResolver templateResolver() {
        SpringResourceTemplateResolver resolver = new SpringResourceTemplateResolver();
        resolver.setPrefix("classpath:/com/example/myapp/");
        resolver.setSuffix(".html");
        resolver.setTemplateMode(TemplateMode.HTML);
        resolver.setCharacterEncoding("UTF-8");
        // 开启缓存(生产环境建议开启,开发环境可设为false)
        resolver.setCacheable(true);
        return resolver;
    }

    @Bean
    public SpringTemplateEngine templateEngine(SpringResourceTemplateResolver resolver) {
        SpringTemplateEngine engine = new SpringTemplateEngine();
        engine.setTemplateResolver(resolver);
        return engine;
    }

    @Bean
    public ThymeleafViewResolver viewResolver(SpringTemplateEngine engine) {
        ThymeleafViewResolver resolver = new ThymeleafViewResolver();
        resolver.setTemplateEngine(engine);
        resolver.setCharacterEncoding("UTF-8");
        resolver.setOrder(1);
        return resolver;
    }
}

2. 构建工具资源拷贝配置(必做)

默认情况下Maven/Gradle只会打包src/main/java目录下的.class文件,不会把同目录的.html模板文件拷贝到类路径,需要额外配置:

Maven 配置

修改pom.xml的build节点:

<build>
    <resources>
        <!-- 拷贝java目录下的html模板文件 -->
        <resource>
            <directory>src/main/java</directory>
            <includes>
                <include>**/*.html</include>
            </includes>
        </resource>
        <!-- 保留原有resources目录的资源拷贝逻辑 -->
        <resource>
            <directory>src/main/resources</directory>
        </resource>
    </resources>
</build>

Gradle 配置

修改build.gradle的sourceSets配置:

sourceSets {
    main {
        resources {
            // 增加java目录作为资源目录,仅包含html文件
            srcDirs += 'src/main/java'
            includes += '**/*.html'
        }
    }
}

3. 使用示例

配置完成后,视图名按子包名/模板名(不带后缀)的格式返回即可,比如:

package com.example.myapp.foo;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
public class Foo {
    @GetMapping("/foo-page")
    public String getFooPage() {
        // 对应com/example/myapp/foo/Template.html
        return "foo/Template";
    }
}
package com.example.myapp.bar;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
public class Bar {
    @GetMapping("/other-page")
    public String getOtherPage() {
        // 对应com/example/myapp/bar/OtherTemplate.html
        return "bar/OtherTemplate";
    }
}

内容的提问来源于stack exchange,提问作者Pavel Polyakoff

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 07:48:02