Why does this simple Webflux Controller calls the Webclient retrieve method twice?

Viewed 639

I have a very simple Webflux controller that just do a GET request to another service endpoint and returns a simple JSON list. The problem is the remote endpoint is always called twice.

This issue doesn't happen if I used Mono as the return type of the controller instead of Flux!

// This calls "/remote/endpoint" twice!

@GetMapping("/blabla")
fun controller() : Flux<JsonNode> {
    return webClient.get()
            .uri("/remote/endpoint")
            .retrieve()
            .bodyToMono(JsonNode::class.java)
            .flatMapIterable { body ->
                body.get("data")
            }
}

// This calls "/remote/endpoint" once.

@GetMapping("/blabla")
fun controller() : Mono<JsonNode> {
    return webClient.get()
            .uri("/remote/endpoint")
            .retrieve()
            .bodyToMono(JsonNode::class.java)
            .map { body ->
                body.get("data")
            }
}
0 Answers
Related