【Spring MVC】WebClientにてPOST通信(retrieveとexchangeToMonoを使用)

概要

retrieve()とexchangeToMono()を使用した、基本的なPOST通信の方法についてまとめた。

 

前提

WebClientのBean定義方法などについては以下を参照。

あわせて読みたい

概要 RESTなAPIにアクセスするのはRestTemplateではなくWebClientが今後推奨となるため、WebClientの概要についてまとめた。 WebClientを使用するための準備と、どんなメソッドがあるのかを紹介している[…]

WebClientの導入

 

基本的な使い方

retrieve()とexchangeToMono()を使用して、それぞれ以下のメソッドを作成する方法について紹介する。

・POST通信を行い、HTTPステータスのみ取得する
・POST通信を行い、ボディなしのResponseEntityを取得する

 

retrieve()の場合

retrieve()でPOST通信を行い、HTTPステータスまたはResponseEntityを取得する。

 

HTTPステータスを取得

retrieve()でPOST通信を行い、HTTPステータスを取得する。

 

WebApiClient.java


public HttpStatus postStatusWithRetrieve(URI uri, Object requestBody) {
    return webClient.post()
            .uri(uri)
            .bodyValue(requestBody)
            .retrieve()
            .toBodilessEntity()
            .map(ResponseEntity::getStatusCode)
            .block();
}

 

.bodyValue(requestBody)

上記メソッドにリクエストボディを設定する。

 

.toBodilessEntity()

上記メソッドを呼ぶことで、ResponseEntity<Void>を保持するMonoを取得する。

 

.map(ResponseEntity::getStatusCode)

上記メソッドにより、取得したResponseEntityからステータスコードのみを取得する。

 

ResponseEntity<Void>を取得

retrieve()でPOST通信を行い、ResponseEntity<Void>を取得する。

 

WebApiClient.java


public ResponseEntity<Void> postEntityWithRetrieve(URI uri, Object requestBody) {
    return webClient.post()
            .uri(uri)
            .bodyValue(requestBody)
            .retrieve()
            .toBodilessEntity()
            .block();
}

 

.toBodilessEntity()

上記メソッドを呼ぶことで、ResponseEntity<Void>を保持するMonoを取得する。

 

exchangeToMono()の場合

exchangeToMono()でPOST通信を行い、HTTPステータスまたはResponseEntityを取得する。

 

HTTPステータスを取得

exchangeToMono()でPOST通信を行い、HTTPステータスを取得する。

 

WebApiClient.java


public HttpStatus postStatusWithExchange(URI uri, Object requestBody) {
    return webClient.post()
            .uri(uri)
            .bodyValue(requestBody)
            .exchangeToMono(res -> Mono.just(res.statusCode()))
            .block();
}

 

.exchangeToMono(res -> Mono.just(res.statusCode()))

Mono.just(…)は、指定した値を保持するMonoを返却する。
上記の場合、ClientResponseが保持するHTTPステータスを保持させている。

 

ResponseEntity<Void>を取得

exchangeToMono()でPOST通信を行い、ResponseEntity<Void>を取得する。

 

WebApiClient.java


public ResponseEntity<Void> postEntityWithExchange(URI uri, Object requestBody) {
    return webClient.post()
            .uri(uri)
            .bodyValue(requestBody)
            .exchangeToMono(res -> res.toBodilessEntity())
            .block();
}

 

.exchangeToMono(res -> res.toBodilessEntity())

上記メソッドを呼ぶことで、ResponseEntity<Void>を保持するMonoを取得する。

 

まとめ

 

☑ bodyValue(…)により、POSTリクエストのボディを簡潔に設定できる

☑ toBodilessEntity()によって、ボディなしのResponseEntity<Void>を取得できる

☑ POST通信のレスポンス取得方法は目的に応じて選択する

 

スポンサーリンク