RestTemplate
でAPIを呼び出した際、HTTPステータスコード4xx
や5xx
(不明なHTTPステータスコードも含む)が返ると例外が発生します。その際、HTTPステータスコードやレスポンスボディを取得する方法をメモしておきます。
RestClientResponseException
の情報を取得すればOK
RestTemplate
で例外が発生した場合、RestClientException
が発生します。RestClientException
をたどると、以下のサブクラスが存在します。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
RestClientException (RestTemplateが投げる例外のベースとなるクラス) | |
├── RestClientResponseException (HTTPレスポンスデータを含む例外のベースとなるクラス) | |
│ ├── HttpStatusCodeException (ステータスコードに基づく例外の抽象クラス) | |
│ │ ├── HttpClientErrorException (4xx系のステータスコードを受信したとき) | |
│ │ └── HttpServerErrorException (5xx系のステータスコードを受信したとき) | |
│ └── UnknownHttpStatusCodeException (不明なステータスコードを受信したとき) | |
└── ResourceAccessException (I/Oエラーが発生したとき) |
今回は、HTTPステータスコードやレスポンスボディなどといったHTTPレスポンスデータを取得したいので、RestClientResponseException
を使います。
具体的には、RestTemplate
を使う際、RestClientResponseException
をcatch
してやればOKです。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
try { | |
Response response = restTemplate.getForObject("http://localhost:8080/error", Response.class); | |
} catch(RestClientResponseException exception) { | |
exception.getRawStatusCode(); // HTTPステータスコード | |
exception.getResponseHeaders(); // レスポンスヘッダ | |
exception.getResponseBodyAsString(); // レスポンスボディ | |
} |
まとめ
RestTemplate
で例外発生時にHTTPステータスコードやレスポンスボディを取得する方法でした。