Spring reactor doOnNext, is it getting executed?

Viewed 1269

I was playing around with reactor

public @NotNull Mono<ServerResponse> findXXXXSse(final ServerRequest request) {
    return request.bodyToMono(XXXXSearch.class)
            .doOnNext(this::validate)
            .flatMap(this::findXXXXSse)
            .switchIfEmpty(this.emptyBodyException());
}

Adn I was wondering if the use of ".doOnNext(this::validate)" was correct or not. From my pint of view, I'm not sure the validate is called before the findXXXXSse ?

Am I wrong ?

1 Answers

Flux.doOnNext method should always be used as a side-effect.

The documentation says "Add behavior (side-effect) triggered when the Flux emits an item." Refer : https://projectreactor.io/docs/core/release/api/reactor/core/publisher/Flux.html#doOnNext-java.util.function.Consumer-

I assume you want to resume your chain only when the validation is successful, i.e., .flatMap(this::findXXXXSse) should only be called if validation succeeds.

You can use filter(this::validate) and add a validate(XXXXSearch.class) method to return true/false.

Related