Понимание Spring Webflux / Реактивные конечные точки - PullRequest
0 голосов
/ 25 марта 2019

Я пытаюсь понять реактивные конечные точки весной, и это меня смущает.

// in a @RestController
@GetMapping("/someendpoint")
fun someEndpoint(): ResponseEntity<Mono<Map<String, Any>>> {
    return ResponseEntity(Mono.zip(
        Mono.fromRunnable<List<SomeItem>> { someApiCall() },
        Mono.fromRunnable<List<SomeOtherItem>> { someOtherApiCall() },
    ).map { tuple ->
        val someItems = tuple.t1
        val someOtherItems = tuple.t2
        mapOf(
            "someItems" to someItems,
            "someOtherItems" to someOtherItems
        )
    }, HttpStatus.OK)
}

У меня есть конечная точка, которая возвращает Mono of Map, идея в том, чтобы просто визуализировать произвольный JSON.

Как часть запроса, я делаю Mono.zip (Mono.fromRunnable {...}), где я вызываю API для данных.

После zip я делаю .map поверх результатов и в итоге возвращаю карту, которую ожидаю увидеть в отрисовке.

Когда я попадаю на конечную точку, JSON не отображается, но вызываются исполняемые файлы в zip, и время ответа учитывает эти вызовы API. .Map после .zip никогда не вызывается. Я, наверное, просто не понимаю что-то простое здесь - например, на .map не подписан?

Что здесь происходит и как обычно справляться с подобной ситуацией, используя Webflux / Reactor?

1 Ответ

0 голосов
/ 26 марта 2019

Как упоминал Рене в комментарии, моя ошибка заключалась в использовании Mono.fromRunnable {} вместо Mono.fromSupplier {}

...