繁体   English   中英

Java Reactor返回不同的异常

[英]Java reactor to return different exception

我有这个客户,它的电话是:

return client
            .post()
            .uri(SERVICE_ENDPOINT)
            .contentType(MediaType.APPLICATION_JSON)
            .syncBody(request)
            .retrieve()
            .bodyToMono(CustomResponse.class)
            .map(CustomResponse::getAck)
            .doOnNext(this::validateResponse)
            .doOnError(throwable -> doOnError(throwable))
            ;

private void ValidateResponse (String ack) {
      if ("ERROR".equals(ack)) {
           throw Exceptions.propagate(new BadResponseException(ack));
      }
}

private void doOnError(Throwable t){
    if(throwable instanceof ReadTimeoutException) {
        throw Exceptions.propagate(new CustomReadTimeoutException(throwable));
    } 
    throw Exceptions.propagate(new CustomInternalException(throwable));
}

问题是,即使我有BadResponseException,它也会转到onError,然后错误的类型为CustomInternalException。 如何保持错误类型为BadResponseException?

通常, doOn*方法并不意味着改变原始序列中的信号,而是更多地用于日志记录(“副作用”)。

尽管正确捕获了这些方法引发的onError并将其转换为下游的onError信号,但我还是建议您遵循更严格的标准并替换:

  • 使用mapdoOnNext ,只需重写ValidateResponse以在不抛出时返回原始String
  • 所述doOnErrorerrorMap(Predicate<Throwable>, Function<Throwable,Throwable>)

任何Throwable都会经历doOnError ,默认情况下,它包装异常并抛出包装的异常。 通过在errorMap中使用谓词,您可以仅包装特定的异常,避免出现问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM