Основываясь на учебнике 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
или они могут не быть автоматически обнаружены.