Как вернуть значение null, если Моно пустое

#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).