我試用了Spring 5(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
)端點響應主體,所以我想擺脫的響應,原始字節,這然後我會自己映射到一個對象。
我得到了它這樣使用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)
這工作,但有一個更簡單,更優雅的方式來獲得這些字節?