java—在这种情况下,为什么不执行reactor doonerror?

oewdyzsn  于 2021-06-30  发布在  Java
关注(0)|答案(0)|浏览(219)

我不知道为什么 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 你能帮我理解为什么吗?

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题