webflux Mono <t> onErrorReturn未调用

时间:2019-02-15 07:22:15

标签: spring-webflux

这是我的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());
}

当我不使用参数“名称”时,它将抛出一个NoSuchElementException; 但是,Mono onErrorReturn不起作用! 为什么或我错了什么?

1 个答案:

答案 0 :(得分:0)

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());
    });
}