Spring BootでRestTemplateを使用してリクエストを送信して、レスポンスを取得する方法を以下に示します。
サンプルコード
package exsample;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.http.ResponseEntity;
import org.springframework.web.client.HttpClientErrorException;
import org.springframework.web.client.HttpServerErrorException;
import org.springframework.web.client.RestClientException;
import org.springframework.web.client.RestTemplate;
public class PutApiExample {
public static void main(String[] args) {
// RestTemplateのインスタンスを作成
RestTemplate restTemplate = new RestTemplate();
// PUTリクエストのURL
String url = "http://localhost:8080/api/puts"; // 実際のAPIエンドポイントに置き換えてください
// リクエストボディを作成
OrderRequest requestDto = new OrderRequest();
requestDto.setOrderId("0123456");
// ヘッダーを設定(必要に応じて)
HttpHeaders headers = new HttpHeaders();
headers.set("Content-Type", "application/json");
// HttpEntityにリクエストボディとヘッダーを設定
HttpEntity<OrderRequest> requestEntity = new HttpEntity<>(requestDto,headers);
try {
// PUTリクエストを送信し、レスポンスを受け取る
ResponseEntity<OrderResponse> responseEntity = restTemplate
.exchange(url, HttpMethod.PUT, requestEntity, OrderResponse.class);
// レスポンスを取得
OrderResponse responseDto = responseEntity.getBody();
// レスポンスを出力
if (responseDto != null) {
System.out.println("OrderId: " + responseDto.getOrderId());
System.out.println("ResultCd: " + responseDto.getResultCd());
System.out.println("ErrorMessage: " + responseDto.getErrorMessage());
} else {
System.out.println("レスポンスが空です");
}
} catch (HttpClientErrorException e) {
// HTTPステータスコードが4xxの場合の処理
System.out.println("HTTPステータスコード: " + e.getStatusCode());
System.out.println("エラーレスポンス: " + e.getResponseBodyAsString());
} catch (HttpServerErrorException e) {
// HTTPステータスコードが5xxの場合の処理
System.out.println("HTTPステータスコード: " + e.getStatusCode());
System.out.println("エラーレスポンス: " + e.getResponseBodyAsString());
} catch (Exception e) {
// その他の例外処理
System.out.println("エラーが発生しました: " + e.getMessage());
}
}
}
説明
-
Response
RestTemplateのexchange()のリターン値を取得できます。 -
HttpClientErrorExceptionのキャッチ
RestTemplateは、HTTPステータスコードが4xxや5xxの場合にHttpClientErrorExceptionやHttpServerErrorExceptionをスローします。
HttpClientErrorExceptionをキャッチすることで、400エラーのレスポンスを取得できます。
- HttpServerErrorExceptionのキャッチ
RestTemplateは、HTTPステータスコードが5xxの場合にHttpServerErrorExceptionをスローします。
この例外をキャッチすることで、500エラーのレスポンスを取得できます。
- エラーレスポンスの取得
e.getResponseBodyAsString()を使用して、エラーレスポンスのボディを文字列として取得します。
必要に応じて、JSON文字列をパースしてオブジェクトに変換することもできます。
- その他の例外処理
ネットワークエラーやその他の例外が発生する可能性あるため、Exceptionをキャッチして適切に処理します。