webflux Mono<T> onErrorReturn 未调用

webflux Mono<T> onErrorReturn not called

这是我的 HandlerFunction

    public Mono<ServerResponse> getTime(ServerRequest serverRequest) {
    return time(serverRequest).onErrorReturn("some errors has happened !").flatMap(s -> {
        // this  didn't called
        return ServerResponse.ok().contentType(MediaType.TEXT_PLAIN).syncBody(s);
    });
}

time(ServerRequest serverRequest)方法是

private Mono<String> time(ServerRequest request) {
    String format = DateTimeFormatter.ofPattern("HH:mm:ss").format(LocalDateTime.now());
    return Mono.just("time is:" + format + "," + request.queryParam("name").get());
}

当我不使用参数 "name" 时,它会抛出一个 NoSuchElementException; 但是,Mono onErrorReturn 不起作用! 为什么或我做错了什么?

onError... 运算符用于处理管道中发生的错误信号。

在你的例子中,NoSuchElementException 被抛出反应管道,然后任何东西都可以订阅返回的 Mono

我认为您可以像这样延迟执行来获得您正在寻找的行为:

private Mono<String> time(ServerRequest request) {
    return Mono.defer(() -> {
        String format = DateTimeFormatter.ofPattern("HH:mm:ss").format(LocalDateTime.now());
        Mono.just("time is:" + format + "," + request.queryParam("name").get());
    });
}