Не удается использовать динамический веб-контент с Spring Boot и Kotlin

Основываясь на учебнике Spring Boot для обслуживаемого динамического веб-контента, я хотел сделать то же самое в Котлине. Мой проект Kotlin основан на этом учебнике . У меня нет проблем с запуском кода обоих учебных пособий.

По моему мнению, мне нужно было добавить контроллер, который вернет ссылку на шаблон.

Здесь 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 делает что-то под капотом, чтобы получить правильный источник из того, что возвращает функция.

РЕДАКТИРОВАТЬ:

Запросил мой импорт:

 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") } к 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") } к 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") } к 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") } к 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") } 

Похоже, что для настройки разрешения просмотра недостаточно настройки spring-boot-starter-web . Попробуйте добавить зависимость spring-boot-starter-thymeleaf а Thymeleaf должен обрабатывать ваш html-файл.

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

Ваши файлы HTML должны быть в файлах src/main/resources/templates или они могут не быть автоматически обнаружены.