概要
RestTemplateを使用した際に発生する基本的な例外についてまとめた。
基本的な例外
RestTemplateを使用してAPI疎通を行ってエラーになった際に、基本的に以下の例外がスローされる。
RestTemplateがスローする例外
java.lang.Throwable
└── java.lang.Exception
└── java.lang.RuntimeException
└── org.springframework.core.NestedRuntimeException
└── org.springframework.web.client.RestClientException(RestTemplate例外の親クラス)
├── HttpStatusCodeException
│ ├── HttpClientErrorException
│ ├── HttpServerErrorException
│ ├── UnknownHttpStatusCodeException
├── ResourceAccessException
├── UnknownContentTypeException
RestClientException
RestTemplateがスローする、すべての例外の親クラス。
基本的にはこの例外をキャッチすれば、RestTemplateがスローするあらゆる例外をハンドリングできる。
HttpStatusCodeException
RestTemplateがスローする、HTTPステータスコードを伴う例外の親クラス。
APIからのHTTPレスポンスがエラー(4xx系・5xx系)、または未知のステータスコードだった場合にハンドリングできる。
HttpClientErrorException
RestTemplateがスローする、4xx系(クライアントエラー)の例外クラス。
404(Not Found)や400(Bad Request)など、クライアント側のリクエストエラーをハンドリングできる。
HttpServerErrorException
RestTemplateがスローする、5xx系(サーバーエラー)の例外クラス。
500(Internal Server Error)や503(Service Unavailable)など、サーバー側の障害をハンドリングできる。
UnknownHttpStatusCodeException
RestTemplateが認識できない、未知のHTTPステータスコードでスローされる例外クラス。
独自のステータスコードや標準外のレスポンスを適切に処理するために使用される。
ResourceAccessException
RestTemplateのネットワーク接続エラーやタイムアウトでスローされる例外クラス。
サーバーへの到達不可や遅延など、通信障害に関連する問題をハンドリングできる。
UnknownContentTypeException
RestTemplateが認識できないContent-Typeのレスポンスを受け取った際にスローされる例外クラス。
想定外のデータ形式を適切に処理するために使用される。
まとめ
☑ RestClientExceptionはRestTemplateで発生するすべての例外の親クラス
☑ HTTPエラー(HttpStatusCodeException)は4xx(HttpClientErrorException)または5xx(HttpServerErrorException)で例外クラスが別れる
☑ 例外ごとに適切な処理を行う必要がある