環境
- IntelliJ
- Spring Boot 2.7.3
- Thymeleaf
- Kotlin 1.6.21
概要
以下の手順で Spring Boot + Thymeleaf を利用した画面有りの Web アプリケーション作成を試みた.
- Spring Initializr で gradle プロジェクトを作成
- ローカル環境で html や kt など諸々のファイルを作成
- IntelliJ でアプリケーションを実行し,Web ブラウザで
localhost/xxx
にアクセスすると問題なく画面が表示される -
gradlew build
を実行して出力した jar ファイルを実行して,Web ブラウザでアクセスすると以下のエラーが発生
org.thymeleaf.exceptions.TemplateInputException: Error resolving template [/xxx/yyy], template might not exist or might not be accessible by any of the configured Template Resolvers
つまりテンプレートが存在しないか,アクセス権限がないらしい.
でも Intellij で実行した場合には問題なく画面が表示されていた.何故?
結論
fun getTop(
modelAndView: ModelAndView
): ModelAndView =
modelAndView.apply {
viewName = "/xxx/yyy"
}
誤: viewName = "/xxx/yyy"
正: viewName = "xxx/yyy"
Intellij で実行した場合やコマンド gradlew bootrun
で実行した場合には,viewName
の先頭に /
が付いていてもよしなに解決してくれるらしい (理由調査中).