java - 为什么我的 WebClient 异常没有被捕获?
问题描述
我有一个方法,当用户单击按钮时,它会调用另一个方法并调用 WebClient 等。基本上,WebClient 会引发异常,但调用方法没有捕获它。
例如,这是一个缩短的版本:
调用方法
try {
service.getMessageAsync(messageDto, results -> getUI().ifPresent(ui -> ui.access(() -> {
.... code here ....
})));
} catch (RuntimeException e) {
logger.error("RuntimeException (startEtl):");
logger.error("\tException: {0}", e);
}
服务方式
public void getMessageAsync(MessageDto messageDto, AsyncRestCallback<MessageDto> callback)
throws RuntimeException {
... code omitted ...
WebClient.RequestHeadersSpec<?> spec = WebClient
.create()
.post()
.uri(URI)
.body(Mono.just(messageDto), MessageDto.class)
.headers(httpHeaders -> httpHeaders.setBasicAuth(username, password));
spec
.retrieve()
.onStatus(HttpStatus::is4xxClientError, error -> Mono.error(new RuntimeException("4xx Client Error.")))
.onStatus(HttpStatus::is5xxServerError, error -> Mono.error(new RuntimeException("5xx Server Error.")))
.toEntityList(MessageDto.class).subscribe(result -> {
callback.operationFinished(message.get(0));
});
}
所以,在我的日志中,我可以清楚地看到这些4xx Client Error.
条目。我不确定它们在日志中的情况。但我RuntimeException (startEtl):
在调用方法中看不到 。
我确定我忽略了一些明显的东西,但我似乎找不到它。
那么为什么调用异常处理没有像我预期的那样工作呢?是因为onStatus
在内部以某种方式处理异常吗?
谢谢
解决方案
推荐阅读
- r - ggplot2 barplot R中垂直条的轻微错位
- android - 如何在kotlin中将Unit转换为String(添加同步代码后UPD不起作用)
- powerapps - PowerApps 构建器未反映对自定义连接器所做的更新
- php - php json_encode 返回“??????” 而不是Unicode?
- python - 使用 pyarrow 将标量值从记录批次转换为十六进制字符串
- vue.js - 如何在nuxt js中动态头部
- javascript - 如何使用 javascript 解码 json 循环数据
- list - Spring Cloud Stream - 一对多转换
- ios - 使用拖放委托拖动集合视图的单元格时如何覆盖滚动行为?
- javascript - 如何使用 findOne 通过不同的对象 id (_id) 比较两个数组对象?