Spring Web应用Thymeleaf模板加载失败,返回空白页面求助
1. 核对模板文件路径
Spring Boot默认Thymeleaf模板必须放在src/main/resources/templates/目录下。你的控制器返回books/list,对应模板路径应为src/main/resources/templates/books/list.html。如果路径错误(比如放到static目录、层级不对),Spring找不到模板就会返回空白。
2. 确认依赖是否齐全
检查Maven或Gradle的依赖配置,必须包含Thymeleaf Starter:
Maven pom.xml
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency>
Gradle build.gradle
implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
依赖缺失会导致Thymeleaf自动配置失效,模板无法被渲染。
3. 排查模板语法与实体类问题
- 你的模板表头写的是
Publisher,但循环里用的是${book.isbn},如果Book实体没有isbn属性、属性名拼写错误,或者没有对应的getter方法,Thymeleaf会静默失败(默认不抛异常)。 - 必须确保Book类的所有要渲染的属性都有public的getter方法,Thymeleaf依赖getter读取属性值。
4. 开启调试日志定位问题
在application.properties里添加日志配置,查看模板加载的详细过程:
logging.level.org.springframework.web=DEBUG logging.level.org.thymeleaf=DEBUG
启动应用访问/books,控制台日志会显示模板是否被找到、渲染时有没有异常,能快速定位核心问题。
5. 验证Repository是否返回数据
如果bookRepository.findAll()返回空列表,模板循环不会生成表格行,但页面应该能看到<h1>Book List</h1>和空表格。如果连这个都看不到,基本是模板路径错误。可以临时添加测试代码验证:
在控制器的getBooks方法里加:
model.addAttribute("testMsg", "测试内容");
模板里加:
<p th:text="${testMsg}">默认文本</p>
如果访问后看不到测试内容,说明模板根本没被加载。
6. 检查控制器注解
确保用的是@Controller而非@RestController——@RestController会直接把返回值当响应体,不会去查找Thymeleaf模板。你的代码里用了@Controller,这点没问题,但再核对下拼写。
内容的提问来源于stack exchange,提问作者Adrián Fernández García

