はじめに
Spring Webの@ControllerAdvice
を使用した例外のハンドリングをしようとしたらCircular view path
のエラーになってしまったので原因と解消方法を記載します。
対象のコード
エラーが起こった際のコードがこちらです。
@ControllerAdvice
を久しぶりに行ったのもあり、こんなコードになっていました。
@ControllerAdvice
class ExceptionHandler {
@ExceptionHandler(Exception::class)
@ResponseStatus(HttpStatus.NOT_FOUND)
fun handleException(e: Exception): String {
return "internal server error."
}
}
そして、このコード部分を通るようなリクエストを行うと以下のエラーが発生しました。
jakarta.servlet.ServletException: Circular view path [internal server error.]: would dispatch back to the current handler URL [/api/internal server error.] again. Check your ViewResolver setup! (Hint: This may be the result of an unspecified view, due to default view name generation.)
原因と解消方法
この原因は、@ResponseBody
を付与していなかったためです。
そのため、handleExceptionからの返却値をSpring MVCがビュー名として解釈し、そのURLに再度ディスパッチしようとして無限ループになっていたのです。
@ResponseBody
を付与する、またはStringではなくResponsEntityを返却するようにすれば、このエラーは発生せず、適切にハンドリングされました。