我正在尝试WebClient使用反应式编程的代码库中的Spring 5(5.0.0.RC2)中的新内容,并且我已成功将JSON响应从端点映射到我的应用程序中的DTO,这非常好用:
WebClient client = WebClient.create(baseURI);
Mono<DTO> dto = client.get()
.uri(uri)
.accept(MediaType.APPLICATION_JSON)
.exchange()
.flatMap(response -> response.bodyToMono(DTO.class));
Run Code Online (Sandbox Code Playgroud)
但是,现在我正在尝试使用协议缓冲区(二进制数据作为application/octet-stream)的端点的响应体,所以我想从响应中获取原始字节,然后我将自己映射到一个对象.
我Bytes从Google Guava 那里得到了这样的工作方式:
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)
Run Code Online (Sandbox Code Playgroud)
这有效,但是有更简单,更优雅的方式来获取这些字节吗?
java spring binary-data protocol-buffers reactive-programming