弹簧靴找不到 Thymeleaf 视图

Posted

技术标签:

【中文标题】弹簧靴找不到 Thymeleaf 视图【英文标题】:Thymeleaf views not found with springboot 【发布时间】:2017-01-04 22:07:09 【问题描述】:

我正在尝试按照本教程将百里香添加到 springboot 应用程序,但我似乎无法让它工作。 教程:http://spr.com/part-2-adding-views-using-thymeleaf-and-jsp-if-you-want/

当我在 LoginController 中使用 @RestController 启动应用程序时,我能够让 springboot 正常工作,但是当我将 @RestController 更改为 @Controller 时,我收到一个错误页面:

出现意外错误(类型=未找到,状态=404)。 没有可用的消息

我在控制器中设置了一个断点,并确认它正在访问 LoginController 中的 index 方法。我觉得这与我添加 Thymeleaf 的方式有关,因为我没有对应用程序做太多其他事情,但到目前为止我所做的一切都会导致相同的错误页面。

我的 build.gradle

buildscript 
repositories 
    maven  url "http://repo.spring.io/libs-snapshot" 
    mavenLocal()

dependencies 
    classpath("org.springframework.boot:spring-boot-gradle-plugin:1.4.0.RELEASE")



apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'idea'
apply plugin: 'spring-boot'

jar 
baseName = 'GazeFest'
version =  '0.1.0'


repositories 
mavenCentral()


sourceCompatibility = 1.8
targetCompatibility = 1.8

dependencies 
compile("org.springframework.boot:spring-boot-starter-web")
compile("org.thymeleaf:thymeleaf-spring4:3.0.0.RELEASE")


task wrapper(type: Wrapper) 
gradleVersion = '3.0'

我的应用程序.java

打包凝视;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Application 

public static void main(String[] args) 
    SpringApplication.run(Application.class, args);



我的 LoginController.java

package gazefest;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@Controller
public class LoginController 

@RequestMapping("/")
public String index(Model model) 
    model.addAttribute("message", "HELLO!");
    return "index";



我的 index.html

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org">
<head lang="en">
<meta charset="UTF-8" />
<title>HELLO</title>
</head>
<body>
<p th:text="$message"></p>
</body>
</html>

我的文件结构

感谢观看!

【问题讨论】:

【参考方案1】:

我认为您不应该使用 thymeleaf-spring4 依赖项,但您应该使用 Thymeleaf 的 Spring boot starter。

对于 Maven:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>

对于 Gradle:

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

我建议使用Spring Initializr 来设置您的项目。这允许您选择任何 Spring boot 启动器并将其添加到 Gradle/Maven 描述符中,这样您就不会因选择依赖项而犯任何错误。

【讨论】:

我尝试使用 Spring Initializr 和上面相同的 LoginController.java 启动一个新项目,但我遇到了相同的错误页面。 我需要指定我的 html 文件所在的位置吗?我认为我目前拥有 index.html 的资源/模板文件夹应该是默认的,但它好像找不到它们 src/main/resources/templates 文件夹(应该由 Spring Initialzr 生成)应该是正确的文件夹。 添加 compile("org.springframework.boot:spring-boot-starter-thymeleaf") 到 gradle config 解决了我的问题。这是一件非常棘手的事情,因为最初我在控制台中看到了 404 页面并且没有错误日志。在这种情况下,问题实际上与缺少 thymeleaf 依赖关系并不明显。

以上是关于弹簧靴找不到 Thymeleaf 视图的主要内容,如果未能解决你的问题,请参考以下文章

thymeleaf入门

009 thymeleaf的引入

thymeleaf前端数据绑定

3.springboot+Thymeleaf

初步认识Thymeleaf

弹簧靴和百里香叶