Почему этот простой Webflux Controller дважды вызывает метод извлечения Webclient? - PullRequest
1 голос
/ 06 июня 2019

У меня очень простой контроллер Webflux, который просто выполняет GET-запрос к другой конечной точке службы и возвращает простой список JSON. Проблема в том, что удаленная конечная точка всегда вызывается дважды.

Эта проблема не возникает, если я использовал Mono в качестве возвращаемого типа контроллера вместо 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")
            }
}
...