Seb
Seb

Reputation: 3902

Spring reactor doOnNext, is it getting executed?

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

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

Am I wrong?

Upvotes: 3

Views: 2759

Answers (1)

Avik Kesari
Avik Kesari

Reputation: 289

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.

Upvotes: 5

Related Questions