[英]Java Reactor : unhandled exception from map(), but is handled from a fromCallable()
[英]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
信号,但我还是建议您遵循更严格的标准并替换:
map
的doOnNext
,只需重写ValidateResponse
以在不抛出时返回原始String
。 doOnError
与errorMap(Predicate<Throwable>, Function<Throwable,Throwable>)
任何Throwable
都会经历doOnError
,默认情况下,它包装异常并抛出包装的异常。 通过在errorMap
中使用谓词,您可以仅包装特定的异常,避免出现问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.