Jiang
Jiang

Reputation: 27

webflux Mono<T> onErrorReturn not called

this is my 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) method is

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

when i don't using param "name",it will throw one NoSuchElementException; But, the Mono onErrorReturn not working! why or what do i wrong?

Upvotes: 1

Views: 1806

Answers (1)

Brian Clozel
Brian Clozel

Reputation: 59056

The onError... operators are meant to deal with error signals happening in the pipeline.

In your case, the NoSuchElementException is thrown outside of the reactive pipeline, before anything can subscribe to the returned Mono.

I think you might get the behavior you're looking for by deferring the execution like this:

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

Upvotes: 1

Related Questions