Примените сложную бизнес-логику к объекту Multi и верните объект Uni в Rest API.

Внутри функции отдыха я делаю реактивный вызов Postgres Db, который возвращает Multi. Я намерен запустить сложную бизнес-логику на Multi и вернуть новый Uni.

      @GET
public Uni<Object2> get() {
    Multi<Object1> objects = DB.getAll(dbClient);

    Uni<HashMap<String, FileTreeNode>> response; // Not sure how to initialize this object without any value
    List<Object1> result = new ArrayList<>();
    objects.subscribe().with(
    object -> result.add(object),
    failure -> System.out.println("Failed with " + failure),
    () -> {
        // Update Uni response object here.
    });

    return response;

}

Может ли кто-нибудь указать мне, как создать объект Uni и пометить его как завершенный внутри бизнес-логики, чтобы уведомить нижестоящие службы.

1 ответ

Я уже ответил на проект Mutiny GitHub. Вам нужно собрать свои предметы в Mapс использованием:

      Uni<Map<String, String>> uni =
        multi.collect()
                .asMap(item -> getUniqueKeyForItem(item));

Если вам нужна более сложная логика, вы можете предоставить свой собственный аккумулятор:

      Uni<MyCollection> uni = multi.collect()
        .in(MyCollection::new, (col, item) -> col.add(item));

Подробнее см. https://smallrye.io/smallrye-mutiny/guides/collecting-items .

Другие вопросы по тегам