无法返回Thymeleaf模板求助:浏览器仅显示‘login’文本
Thymeleaf模板不渲染问题排查与解决
问题描述
Thymeleaf模板无法正常渲染,浏览器仅显示文本‘login’,而非预期的模板页面,推测问题出在配置环节但未定位到错误。
相关配置与代码
application.yml
spring: autoconfigure: exclude: org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration; datasource: url: jdbc:mysql://127.0.0.1:3306/getyourhotel password: *password* username: root jpa: database-platform: org.hibernate.dialect.MySQL8InnoDBDialect generate-ddl: true show-sql: true hibernate: ddl-auto: update properties: hibernate: globally_quoted_identifiers: true dialect: org.hibernate.dialect.MySQL8Dialect format_sql: true sql: init: mode: never continue-on-error: false thymeleaf: prefix: classpath:/templates/ suffix: .html mode: HTML cache: false application: title: getyourhotel version: 1.0
pom.xml依赖
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jdbc</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-validation</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> <version>3.2.0</version> </dependency> <dependency> <groupId>com.mysql</groupId> <artifactId>mysql-connector-j</artifactId> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-test</artifactId> <scope>test</scope> </dependency> </dependencies>
控制器代码
@PostMapping("/login") public String login(@RequestBody @Valid User user, Model model) { UserDTO userDTO = userService.findUser(user); model.addAttribute("user", userDTO); return "login"; }
项目结构
templates目录位于src/main/resources下,需包含login.html模板文件。
排查与解决方案
1. 修正控制器请求体注解问题
你在控制器方法中使用了@RequestBody,该注解用于将请求体解析为JSON/XML格式的对象,而非接收表单参数。此时返回字符串"login"会被直接作为响应体输出,而非触发Thymeleaf模板渲染。
解决方式:
如果是表单提交登录,移除@RequestBody,改用表单参数接收方式:
@PostMapping("/login") public String login(@Valid User user, BindingResult result, Model model) { if (result.hasErrors()) { return "login"; // 验证失败返回登录页 } UserDTO userDTO = userService.findUser(user); model.addAttribute("user", userDTO); return "home"; // 登录成功跳转到首页,避免返回登录模板造成混淆 }
2. 检查模板文件与命名空间
- 确认
src/main/resources/templates/login.html文件存在,文件名大小写与控制器返回的视图名称一致(Linux系统下大小写敏感)。 - 模板文件开头必须引入Thymeleaf命名空间:
<html xmlns:th="http://www.thymeleaf.org">
3. 修复自动配置项语法错误
application.yml中spring.autoconfigure.exclude末尾多了分号;,会导致配置失效,需移除:
spring: autoconfigure: exclude: org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration
4. 统一依赖版本
手动指定Thymeleaf starter版本可能与SpringBoot父工程版本冲突,建议移除版本号,使用SpringBoot统一管理的版本:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> <!-- 移除手动指定的version --> </dependency>
5. 验证表单提交逻辑
确保登录页面的表单method为post,action指向/login,避免请求方式不匹配导致逻辑异常。
内容的提问来源于stack exchange,提问作者korroziea
相关产品推荐
相关产品推荐

