无法使用Spring Boot和Kotlin提供动态Web内容

时间:2017-01-27 15:54:07

标签: spring spring-mvc spring-boot kotlin

基于Spring Boot tutorial提供动态网页内容,我想在Kotlin中做同样的事情。我的Kotlin项目基于tutorial。运行这两个教程的代码我没有问题。

根据我的理解,我只需要添加一个控制器来返回对模板的引用。

这里HelloController.kt(位于src / main / kotlin / foo / controller下):

package foo.controller

import org.slf4j.LoggerFactory
import org.springframework.stereotype.Controller
import org.springframework.web.bind.annotation.RequestMapping

@Controller
class HelloController {

    private val log = LoggerFactory.getLogger(HelloController::class.java)

    @RequestMapping("/")
    fun hello(): String {
        log.info("foo")
        return "index"
    }
}

以下是我想访问的简单"模板",index.html(位于src / main / resources / templates / index.html下):

<html>
<head>
</head>
<body>
Bar
</body>
</html>

从技术上讲,如果我转到localhost:8080我应该index.html显示我不知道。相反,我有404错误。我确实显示了已记录的内容,因此调用了hello方法。我究竟做错了什么?我没有在Spring Boot教程中看到任何配置文件,所以我猜Spring正在做一些事情,以便从函数返回的内容中获取正确的资源。

编辑:

请求我的graddle导入:

buildscript {
    val springBootVersion = "1.4.3.RELEASE"
    val kotlinVersion = "1.0.6"
    extra["kotlinVersion"] = kotlinVersion

    repositories {
        mavenCentral()
    }

    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:$springBootVersion")
        classpath("org.jetbrains.kotlin:kotlin-noarg:$kotlinVersion")
        classpath("org.jetbrains.kotlin:kotlin-allopen:$kotlinVersion")
        classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion")
    }
}

apply {
    plugin("kotlin")
    plugin("kotlin-spring")
    plugin("kotlin-jpa")
    plugin("org.springframework.boot")
}

version = "0.0.1-SNAPSHOT"

configure<JavaPluginConvention> {
    setSourceCompatibility(1.8)
    setTargetCompatibility(1.8)
}

repositories {
    mavenCentral()
}

val kotlinVersion = extra["kotlinVersion"] as String

dependencies {
    compile("org.springframework.boot:spring-boot-starter-web")
    compile("org.springframework.boot:spring-boot-starter-data-jpa")
    compile("com.h2database:h2")
    compile("org.jetbrains.kotlin:kotlin-stdlib:$kotlinVersion")
    compile("org.jetbrains.kotlin:kotlin-reflect:$kotlinVersion")
    compile("org.apache.commons:commons-io:1.3.2")
    compile("org.apache.commons:commons-lang3:3.3.1")
    testCompile("org.springframework.boot:spring-boot-starter-test")
}

1 个答案:

答案 0 :(得分:1)

我看起来spring-boot-starter-web依赖关系不足以设置视图解析。尝试添加spring-boot-starter-thymeleaf依赖项, Thymeleaf 应该处理您的html文件。

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

您的HTML文件应该在src/main/resources/templates中,否则可能无法自动检测到。