Я пытаюсь понять реактивные конечные точки весной, и это меня смущает.
// 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?