ClientResponse(org.springframework.web.reactive.function.client.ClientResponse)は、WebClientの使用中にクラス間で不整合を示しています
残りのサービスを呼び出すためにWebClient(org.springframework.web.reactive.function.client.WebClient)を使い始めました。Utility.javaとServiceImpl.javaという2つのクラスがあります。ServiceImpl.javaは、私がWebClientを使用する場所です。私が行っているポストコールは次のようになります-
ClientResponse response = webClient.post()
.uri(path)
.body(Mono.just(inputDTO),InputDTO.class)
.exchange()
.block();
(上記のClientResponseはorg.springframework.web.reactive.function.client.ClientResponseです)(ヘッダーとステータスコードが必要なため、取得の代わりに交換を使用しています)
ここで、この応答をいくつかのDTO(ResponseDTO)に変換しようとしています。
Mono<ResponseEntity<ResponseDTO>> mono = response.toEntity(ResponseDTO.class);
ResponseEntity<ResponseDTO> resEntity = mono.block();
ResponseDTO myObj = resEntity.getBody();
したがって、myObjはResponseDTOクラスのオブジェクトです。
問題は、ユーティリティクラスで「応答をResponseDTO.java」に変換すると、myObj = nullになるということです。しかし、ServiceImpl.javaで(post APIを呼び出した直後に)実行すると、適切な本体(ResponseDTOオブジェクト)が返されます。ServiceImpl.javaの2つの異なるメソッドで変換と呼び出し後の操作を実行しても、同じ問題が発生します。ここで何かを構成する必要がありますか?
回答
私は何が問題なのか理解しました。REST apiを呼び出した後、応答から初めて読み取った後にフラッシュされた場合は、応答の本文。本文の内容を読んでいたサービス実装クラスにSysoutステートメントがありました。
推奨事項:本文の内容を1回だけ読み取り、変数に格納します。必要に応じて使用してください。