我正在为spring-boot应用程序使用WebClient
自定义BodyExtractor
类
WebClient webLCient = WebClient.create();
webClient.get()
.uri(url, params)
.accept(MediaType.APPLICATION.XML)
.exchange()
.flatMap(response -> {
return response.body(new BodyExtractor());
})
BodyExtractor.java
@Override
public Mono<T> extract(ClientHttpResponse response, BodyExtractor.Context context) {
Flux<DataBuffer> body = response.getBody();
body.map(dataBuffer -> {
try {
JaxBContext jc = JaxBContext.newInstance(SomeClass.class);
Unmarshaller unmarshaller = jc.createUnmarshaller();
return (T) unmarshaller.unmarshal(dataBuffer.asInputStream())
} catch(Exception e){
return null;
}
}).next();
}
上面的代码适用于较小的有效负载,但不适用于较大的有效负载,我认为这是因为我仅使用读取单个通量值,next
并且不确定如何组合和读取全部dataBuffer
。
我是电抗器的新手,所以我对通量/单声道不了解很多技巧。
我能够通过使用Flux#collect
和使它工作SequenceInputStream
@Override
public Mono<T> extract(ClientHttpResponse response, BodyExtractor.Context context) {
Flux<DataBuffer> body = response.getBody();
return body.collect(InputStreamCollector::new, (t, dataBuffer)-> t.collectInputStream(dataBuffer.asInputStream))
.map(inputStream -> {
try {
JaxBContext jc = JaxBContext.newInstance(SomeClass.class);
Unmarshaller unmarshaller = jc.createUnmarshaller();
return (T) unmarshaller.unmarshal(inputStream);
} catch(Exception e){
return null;
}
}).next();
}
InputStreamCollector.java
public class InputStreamCollector {
private InputStream is;
public void collectInputStream(InputStream is) {
if (this.is == null) this.is = is;
this.is = new SequenceInputStream(this.is, is);
}
public InputStream getInputStream() {
return this.is;
}
}
问题内容: 我正在将用RxJava 1.x编写的小项目转换为Reactor3.x。一切都很好,除了我找不到如何用合适的替代品代替。我有,我需要将其转换为。 问题答案: 在Reactor 3中,根据原始来源(数组,可迭代等),运算符被专门化为几个变体。 在您的情况下使用。
我有下面的反应代码使用通量在反应堆核心: 正如您所看到的,对于我的流程的外部源(FluxSink.OverflowStrategy.Latest),我对此进行了背压处理。但是,我还想为我的进程配置redis(redishashreactiveCommands.hmset(key,map))的背压,因为它对我的进程来说可能是一个比外部源更大的瓶颈。我希望我需要为redis部分创建另一个flux并将它
问题内容: 我有一个MonoA。对象A包含两个列表。我想直接创建两个助焊剂。没有block(),这可能吗? 问题答案: 使用Mono.flatMapMany()方法:
我对字符串列表进行了一些数据转换,得到了一个列表,其中左表示错误,右表示成功转换的项。 我将结果划分为: 做了一些错误处理后,我想返回有效项目的。这意味着,返回所有右元素的值。由于分区,我已经知道项目的所有元素。我想出了五种可能的方法。但是易读性和性能最好的是什么?在Scala中有没有惯用的方法?
问题内容: 我想播放现在以JSON格式保存的数据。但是我对R非常陌生,对如何处理数据一无所知。您可以在下面看到我设法实现的目标。但首先,我的代码: 我能够得到数据: 尽管输出看起来很原始: 请注意,JSON有点嵌套。我可以使用Python创建表,但是R似乎要复杂得多。 编辑: 我的JSON: 问题答案: 返回一个列表,您可以使用函数来遍历每个元素。将其转换为“表”非常简单(一旦您知道该怎么做!)(