gpt4 book ai didi

Java Reactor : unhandled exception from map(), 但由 fromCallable() 处理

转载 作者:行者123 更新时间:2023-12-01 19:34:29 26 4
gpt4 key购买 nike

在以下两个示例中,第一个示例(使用 map())告诉我 readTree() 存在未处理的异常,但第二个示例则不然例子。为什么这样 ?谢谢!

Mono.just(jsonString)
.map(jsonString1 -> {
return new ObjectMapper().readTree(jsonString1);
})
.onErrorResume(IOException.class, error -> {
return Mono.error(new InvalidContentException("error with the JSON. " + error));
})
Mono.fromCallable(() -> {
return new ObjectMapper().readTree(jsonString);
})
.onErrorResume(IOException.class, error -> {
return Mono.error(new InvalidContentException("error with the JSON. " + error));
})

最佳答案

Mono.fromCallable :- 使用 Callable 作为参数并创建一个新的 MonoCallable 对象,该对象扩展 Mono。所以 callable 是一个FunctionalInterface,它有一个方法call(),因此这个调用方法会抛出异常。

例如:-这不会引发异常

Callable<JsonNode> callableObj = () -> new ObjectMapper().readTree(jsonString);

但是当我们调用方法 call() 时,将会抛出异常。

callableObj.call();

所以当我们调用它时,我们在这里创建一个 MonoCallable,因此它不会抛出异常。因为它是 Callable 类型。

Mono.fromCallable(() -> {
return new ObjectMapper().readTree(jsonString);
})

因此,当我们对其应用下游调用(例如 mapflatMap)时,它将调用 call() 方法。因此,如果发生异常,它将被包装到 MonoError 中,我们不必显式处理。

这就是为什么 readTree 没有在 Mono.fromCallable 中抛出错误的原因。

如需进一步引用,您可以在此处检查可调用:- javadoc for callable您可以在其中进行检查,直到调用 call()它不会抛出异常。

在这种情况下:-

Mono.just(jsonString)
.map(jsonString1 -> {
return new ObjectMapper().readTree(jsonString1);
})
.onErrorResume(IOException.class, error -> {
return Mono.error(new InvalidContentException("error with the JSON. " + error));
})

它返回 MonoMap,它在 .map 调用中扩展了 Mono,因此我们必须处理它。

关于Java Reactor : unhandled exception from map(), 但由 fromCallable() 处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58337054/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com