2
2

Circular view pathのエラー解決

Last updated at Posted at 2024-03-17

Controllerクラスの単体テストをJUnitで行った際に、jakarta.servlet.ServletException: Circular view path というエラーを解決した方法の備忘録です。

Circular view pathのエラーの原因はこれだけではないと思いますが、自分でエラー原因を調べていたときに、なかなか検索にヒットしなかったため、投稿することにしました。

(私は初学者なので記事に間違いがあるかもしれません。指摘やアドバイス、コメント等があれば遠慮なくお願いいたします。)

環境

Spring Tool Suite 4.21.1
JUnit 5

実行したControllerTestクラス

ControllerTestクラスのコードのうち、問題のエラーが発生した箇所を抜粋します。

SampleControlleTest.java

	// サービスクラスから"success"の結果が返ってきたとき、complete.htmlを返すかどうかをテストする
	@Test
	void test() throws Exception {
		when(sampleService.process("id","pw")).thenReturn("success");
		mockMvc.perform(post("/complete").param("ID","id").param("PW", "pw"))
			.andExpect(view().name("complete")); // エラーが発生
	}

今回発生したエラー

上記のテストコードを実行すると、jakarta.servlet.ServletException: Circular view path というエラーが発生しました。

jakarta.servlet.ServletException: Circular view path [complete]: would dispatch back to the current handler URL [/complete] again. Check your ViewResolver setup! (Hint: This may be the result of an unspecified view, due to default view name generation.)

エラーの内容を簡単に和訳すると、

「URLである"/complete"に再びディスパッチされます。ViewResolver の設定を確認してください。 (ヒント: 未指定のビューの結果である可能性があります。)」

とのこと。

エラーの原因・解決方法

エラーの原因は、post先のURLとviewのhtmlファイル名が同じ名前(complete)だったことです。

つまり解決するには、post先のURLとviewのhtmlファイル名を異なる名前にする必要があります。

例えば、view先を"complete"から"complete.html"に変更すると、エラーは起きなくなります。
※このとき、Controllerクラスのソースコードも変更に対応するのを忘れずに。

SampleControllerTest.java
@Test
	void test() throws Exception {
		when(sampleService.process("id","pw")).thenReturn("success");
        mockMvc.perform(post("/complete").param("ID","id").param("PW", "pw"))
			.andExpect(view().name("complete.html")); // エラーは発生しない
   }
2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2