如何最好地从Spring WebClient的客户端Response中获取字节数组?
我正在使用反应式编程的代码库中试用Spring 5(5.0.0.RC2)中的新内容,并且我已经成功地将JSON响应从端点映射到我的应用程序中的DTO,这非常好:WebClient
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)
这有效,但是有没有更简单,更优雅的方法来获取这些字节?