円形ビューパスエラー
1. 序章
このチュートリアルでは、SpringMVCアプリケーションでCircularViewPathエラーを取得して解決する方法を見ていきます。
2. 依存関係
これを示すために、簡単なSpring BootWebプロジェクトを作成しましょう。 まず、Mavenプロジェクトファイルに SpringBootWebスターター依存関係を追加する必要があります。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
3. 問題の再現
次に、1つのパスに解決される1つのControllerを使用して単純なSpring Bootアプリケーションを作成しましょう。
@Controller
public class CircularViewPathController {
@GetMapping("/path")
public String path() {
return "path";
}
}
戻り値は、応答データを生成するビュー名です。 この場合、戻り値は path であり、これはpath.htmlテンプレートに関連付けられています。
<html>
<head>
<title>path.html</title>
</head>
<body>
<p>path.html</p>
</body>
</html>
サーバーを起動した後、 http:// localhost:8080 / path にGETリクエストを送信することで、エラーを再現できます。 結果は、CircularViewPathエラーになります。
{"timestamp":"2020-05-22T11:47:42.173+0000","status":500,"error":"Internal Server Error",
"message":"Circular view path [path]: would dispatch back to the current handler URL [/path]
again. Check your ViewResolver setup! (Hint: This may be the result of an unspecified view,
due to default view name generation.)","path":"/path"}
4. ソリューション
デフォルトでは、SpringMVCフレームワークはInternalResourceViewクラスをビューリゾルバーとして適用します。 その結果、@GetMapping値がviewと同じである場合、リクエストはCircularViewパスエラーで失敗します。
考えられる解決策の1つは、ビューの名前を変更し、コントローラーメソッドの戻り値を変更することです。
@Controller
public class CircularViewPathController {
@GetMapping("/path")
public String path() {
return "path2";
}
}
ビューの名前を変更してコントローラーメソッドの戻り値を変更したくない場合、別の解決策は、プロジェクトに別のビュープロセッサーを選択することです。
最も一般的なケースでは、ThymeleafJavaテンプレートエンジンを選択できます。 spring-boot-starter-thymeleaf依存関係をプロジェクトに追加しましょう。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
プロジェクトを再構築した後、プロジェクトを再度実行でき、リクエストは成功します。 この場合、ThymeleafはInternalResourceViewクラスを置き換えます。
5. 結論
このチュートリアルでは、Circular Viewパスエラー、それが発生する理由、および問題を解決する方法について説明しました。 いつものように、記事の完全なソースコードは、GitHubでから入手できます。