在以下两个示例中,第一个(带有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));
})
Run Code Online (Sandbox Code Playgroud)
Mono.fromCallable(() -> {
return new ObjectMapper().readTree(jsonString);
})
.onErrorResume(IOException.class, error -> {
return Mono.error(new InvalidContentException("error with the JSON. " + error));
})
Run Code Online (Sandbox Code Playgroud)
Mono.fromCallable:- 使用 Callable 作为参数并创建一个MonoCallable扩展的新对象Mono。所以callable是一个 FunctionalInterface,它有一个方法,call()所以这个调用方法抛出异常。
例如:- 这不会引发异常
Callable<JsonNode> callableObj = () -> new ObjectMapper().readTree(jsonString);
Run Code Online (Sandbox Code Playgroud)
但是当我们调用该方法时,call()这将引发异常。
callableObj.call();
所以当我们调用它时,我们在这里创建了一个 MonoCallable,因此它不会抛出异常。因为它是类型Callable。
Mono.fromCallable(() -> {
return new ObjectMapper().readTree(jsonString);
})
Run Code Online (Sandbox Code Playgroud)
因此,当我们对 this 应用下游调用时,例如maporflatMap它将调用该call()方法。因此,如果发生异常,它将被包装到 MonoError 中,我们不必显式处理。
这就是为什么readTree没有在Mono.fromCallable.
为了进一步参考,您可以在此处检查 callable :-
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));
})
Run Code Online (Sandbox Code Playgroud)
它正在返回MonoMap,它Mono在.map调用中扩展,因此我们必须处理它。
| 归档时间: |
|
| 查看次数: |
701 次 |
| 最近记录: |