#java #spring #webflux
Вопрос:
Я вызываю внешнюю службу , чтобы получить externalId
, в случае, если эта служба не работает, все, что мне нужно, это просто заполнить значение null
return externalClient.getExternalId() //returns Mono<String> or Mono.empty()
.map(id -> {
//in case of empty stream, i need call entity.setExternalId(null);
entity.setExternalId(id);
return entity;
});
Комментарии:
1. вы можете проверить длину потоков с помощью функции stream().count(). Какую терминальную операцию вы используете в потоке?
2. Прошло некоторое время, но я думал, что есть «пустое» Моно, если у вас нет двух вариантов, как я это вижу, верните
Optional<T>
, чтобы указать, что ваш метод может возвращать значение или нет, или если это условие ошибкиError
, то естьMono.error
Ответ №1:
Попробуйте выполнить следующие действия:
return externalClient.getExternalId()
.map(id -> {
entity.setExternalId(id);
return entity;
})
.switchIfEmpty(() -> {
entity.setExternalId(null);
return Mono.just(entity);
});
Комментарии:
1. второе решение вызовет исключение в java.base/java.util. Объекты.requireNonNull(Объекты.java:246)
2. Спасибо! Предложение было удалено (я уже некоторое время не использую обычный webflux).