我不知道为什么 doOnError
在这个例子中,代码没有被执行,我有一个调用rest服务的方法,使用 WebClient
,并将响应返回为 InputStream
:
public InputStream loadAsStream() throws IOException {
PipedOutputStream osPipe = new PipedOutputStream();
PipedInputStream isPipe = new PipedInputStream(osPipe);
Mono<ClientResponse> mono = WebClient.builder()
.baseUrl("http://localhost:8089/")
.build()
.get()
.uri("/loadData")
.accept(MediaType.ALL)
.exchange()
.doOnError(e -> LOG.error("first doOnError: ", e));
Flux<DataBuffer> flux = DataBufferUtils.write(mono.flatMapMany(response -> response.body(BodyExtractors.toDataBuffers())), osPipe);
flux.doOnError(e -> LOG.error("second doOnError: ", e))
.doFinally(s -> LOG.debug("finally"))
.subscribe(DataBufferUtils.releaseConsumer());
return isPipe;
}
inputstream稍后将用于使用objectmapper反序列化pojo:
try (InputStream inputStream = loadService.loadAsStream()) {
pojo = objectMapper.readValue(inputStream, SimplePojo.class);
} catch (IOException ex) {
throw new RuntimeException(ex);
}
例如,如果服务不可用,rest调用失败并出现错误,那么首先两者都是 doOnError
第二个呢 doOnError
正在执行,但如果在反序列化过程中出现异常(在 objectMapper.readValue
)然后只有第二个 doOnError
你能帮我理解为什么吗?
暂无答案!
目前还没有任何答案,快来回答吧!