この記事に書いてあること
Spring MVCで書いたコードの試験をしていた際、
javax.servlet.ServletException: Circular view path [sample]:
would dispatch back to the current handler URL [/sample] again. Check your ViewResolver setup!
が発生したのですが、その理由がしょうもなかったので備忘メモ。
前提
- Sprinv MVC5.x
- Thymeleaf
- Java11(あんまり関係ない)
- Junit4(あまり関係ない)
- ExceptionHandlerを使用
結論
返却する画面名に存在しない画面名を指定していました・・・
本論
SpringMVCとExceptionHandlerを使って、Controllerから特定の例外をスローしてHandler側で画面を返しています。
JUNIT4を使って試験をしているときに、試験ケースとして「エラーが発生した場合○○画面を返す」という試験を実施した際、想定通りExceptionHandlerに処理が委譲されているのですが、画面名を返したところで下記のエラー。
javax.servlet.ServletException: Circular view path [sample]: would dispatch back to the current handler URL [/sample] 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)
at org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:148)
at org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:317)
~~~~
原因はExceptionHandlerが返している画面名が存在しない画面名を指定していたためでした。
試験環境ではerror.htmlという画面なかったため、template resolverが名前解決できなかったということですね。