ただ日々を記すもの

意識高めを装うことができます

Kotlin + Spring BootでThymeleafテンプレートを使ってハマった話

概要

現在、Kotlin + Spring Bootで開発をしているのですが その中で詰まった、ハマってしまった部分を紹介します。

今回はThymeleafテンプレートに関して。
かなり開発序盤の内容です。主にセットアップ。

ハマった問題

その1

前回のブログ で紹介したようにプロジェクトを作成し、その後ログイン画面に遷移しようとしたときの話。

import org.springframework.web.bind.annotation.GetMapping
import org.springframework.web.bind.annotation.RestController

@RestController
class LoginController {

    @GetMapping("/")
    fun index(): String {
        return "login"
    }
}

こんな感じで初めは書いていたのですが、その結果がこちら

f:id:RONKUN:20170805200458p:plain

…いやいやログイン画面だけど。。笑


こうなってしまった原因は、@RestController の部分。
ここは @Controller にしてあげなければいけません。


また、今回htmlファイルは、
src/main/resources/templates/login.html というファイルを作成しています。

デフォルトだと resources/templates 直下のhtmlファイルを探しにいっているのでこの辺も注意が必要です!
(ここも結構時間かかった。。)



その2

もう一つ時間がかかったのがこちらのエラー。
f:id:RONKUN:20170805201438p:plain

一つ目の問題と同時に起こっていたので、初めはルーティングの問題だと思ってファイル名変えたり、ファイルの配置変えたり色々したのですが全然うまくいきませんでした。
諦めかけてたときにふと画面上のエラーメッセージを読むと、Exception parsing document。 あれ、これってもしかしてParseに失敗してる!??

ターミナルを確認してみると、

org.xml.sax.SAXParseException: 要素タイプ"img"は、対応する終了タグ"</img>"で終了する必要があります。

おー!確かにちゃんとエラー出てた!!

どうやらimgタグやinputタグを書くときには、閉じタグが必要になるようです。ちょっとめんどくさい。。

閉じタグを追加してあげると無事にログイン画面が表示されました。
よかったよかった

さいごに

Thymeleafを使用するには、build.gradle のdependenciesに以下を追加してあげる必要があるみたいです。(参考サイトより)
compile("org.springframework.boot:spring-boot-starter-thymeleaf")

最後に参考にしたサイトを紹介しておきます。

nosix.hatenablog.com