私は、リアクティブプログラミングを使用するコードベースでSpring5(5.0.0.RC2)から新しいWebClient
を試しています。私はJSONレスポンスをエンドポイントからアプリケーションのDTOにマッピングすることに成功しました。素敵:Spring WebClientのClientResponseからバイト配列を取得するにはどうすればよいですか?
WebClient client = WebClient.create(baseURI);
Mono<DTO> dto = client.get()
.uri(uri)
.accept(MediaType.APPLICATION_JSON)
.exchange()
.flatMap(response -> response.bodyToMono(DTO.class));
は、しかし、今私は(バイナリデータがapplication/octet-stream
を務めた)プロトコルバッファを使用するエンドポイントからのレスポンスボディにしようとしているので、私は応答から生のバイトを取得したいのですが、どの次にオブジェクトにマップします。
私はそれがGoogleのグアバからBytes
を使用して、このように動作するようになった:
Mono<byte[]> bytes = client.get()
.uri(uri)
.accept(MediaType.APPLICATION_OCTET_STREAM)
.exchange()
.flatMapMany(response -> response.body(BodyExtractors.toDataBuffers()))
.map(dataBuffer -> {
ByteBuffer byteBuffer = dataBuffer.asByteBuffer();
byte[] byteArray = new byte[byteBuffer.remaining()];
byteBuffer.get(byteArray, 0, bytes.length);
return byteArray;
})
.reduce(Bytes::concat)
これは動作しますが、これらのバイトを取得するために簡単に、よりエレガントな方法は何ですか?