Tag: 反应式编程

使用ReactiveX for Java进行Http调用

我是ReactiveX for Java的新手,我有以下代码块来进行外部http调用,但它不是异步的。 我们使用的是rxjava 1.2和Java 1.8 private ResponseEntity callExternalUrl(String url, String json, HttpMethod method) { RestTemplate restTemplate; HttpEntity request; request = new HttpEntity(jsonContent, httpHeaders); return restTemplate.exchange(url, httpMethod, request, String.class); } 我在网上找到了以下代码块,但我无法理解它以及如何将其应用到我的代码库中。 private RxClient httpClient; public Observable fetchResult(String url, Func1 mapper) { return httpClient.target(url) .request() .rx() .get() .subscribeOn(Schedulers.io()) .map(mapper); }

如何从Spring WebClient的ClientResponse中获取最佳字节数组?

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