У меня есть приложение Boot 2.x, использующее Webflux, где я передаю поток Parts
, используя @RequestBody Flux<Part>
.
Моя проблема в том, что мне нужно прочитать первый Part
, инициализировать объект, используя содержимое этого Part
, а затем передать этот объект для использования во втором Part
. Как мне это сделать, при этом я читаю каждую часть, когда она доступна?
Мое текущее решение состоит в том, чтобы использовать groupBy
, но при этом срабатывает ожидание завершения всех частей, что недопустимо.
Вот пример того, что я пытаюсь сделать:
parts.scan( new Foo(), (foo, part) -> {
if(part.name().equalsIgnoreCase("first_part"))
{
Jackson2JsonDecoder jackson2JsonDecoder = new Jackson2JsonDecoder();
Mono<Metadata> metadata = jackson2JsonDecoder.decodeToMono(part.content(), ResolvableType.forClass(Metadata.class), null, null);
// Here's my problem. How do I call foo.init(metadata) in a non-blocking way while still returning foo so it can be used by the next part?
}
else if(part.name().equalsIgnoreCase("second_part"))
{
// Use initialized foo from part 1 to push second_part's DataBuffer Flux
}
});
Спасибо!