Spring Bootでランタイムの例外「Check your ViewResolver setup! (Hint: This may be the result of an unspecified view, due to default view name generation.)」が発生したので、その時の解決方法について書いています。
※ 本ページはプロモーションが含まれています。
Spring BootでWebアプリを開発していて動作確認をしようとブラウザでアクセスしたら、ランタイムの例外が発生しました。
2023-06-29T06:10:56.771+09:00 ERROR 21248 --- [nio-8080-exec-1] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Circular view path [hoge]: would dispatch back to the current handler URL [/hoge] again. Check your ViewResolver setup! (Hint: This may be the result of an unspecified view, due to default view name generation.)] with root cause
jakarta.servlet.ServletException: Circular view path [hoge]: would dispatch back to the current handler URL [/hoge] again. Check your ViewResolver setup! (Hint: This may be the result of an unspecified view, due to default view name generation.)
at org.springframework.web.servlet.view.InternalResourceView.prepareForRendering(InternalResourceView.java:210) ~[spring-webmvc-6.0.10.jar:6.0.10]
at org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:148) ~[spring-webmvc-6.0.10.jar:6.0.10]
at org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:314) ~[spring-webmvc-6.0.10.jar:6.0.10]
at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1415) ~[spring-webmvc-6.0.10.jar:6.0.10]
〜
このページでは、このエラーを解決するために試した事、解決方法について説明しています。
◾️動作環境とバージョン情報です
Spring Bootバージョン:3.1
Java:Java17(OpenJDK17 Eclipse Temurin(Adoptium))
開発環境:Eclipse(Pleiades All in One、Java Full Edition版)
まず、冒頭のランタイム例外の原因ですが、Spring BootプロジェクトでThymeleafのライブラリを読み込んでいない事でした。
Thymeleaf(画面側のHTML)のコードを書いてその動作確認をした時に、Thymeleafのライブラリが無ければそれは当然エラーになりますね。
このエラーの原因に気づくまでに小二時間程ハマりました。せめて例外メッセージに「Thymeleaf」「Template」という文言があれば、もう少し早く気づけたかもしれないのに。
ちなみに例外メッセージのヒントの部分「Hint: This may be the result of an unspecified view, due to default view name generation.)」をDeepLで翻訳したらこんな感じです。
ヒント:これは、デフォルトのビュー名生成により、指定されていないビューの結果である可能性があります)。
自分が悪いんだけどこれじゃ分からん。
という事で、解決方法はThymeleafのライブラリをSpring Bootプロジェクトに追加するだけです。
ライブラリを追加するには、開発環境がEclipseやSTSならプロジェクト・エクスプローラーにあるSpring Bootプロジェクトを右クリック->Spring->スターターの編集を選択すれば、Springスタータープロジェクトのウインドウが開くので、そこでThymeleafライブラリを追加できます。
もしくは、MavenでSpring Bootでプロジェクトを作っているなら、pom.xmlファイルに直接このコードを追加してもいいです。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>