Неверный тип возвращаемого значения в справочнике по методу: не удалось преобразовать реактор.core.publisher.Mono <S>в котор расширяет R> - PullRequest
0 голосов
/ 04 ноября 2018

У меня есть два Mono -я, и я хотел бы вернуть / выбросить исключение, если одно не было пустым (пользователь уже существует), или вернуть значение Mono<User> на основе другого (настройки копирования и данные DTO для объекта пользователя). Я написал:

public Mono<User> registerUser(UserRegistrationDto userRegistrationDto) {
        Mono<Settings> settingsMono = settingsService.getSettings();
        Mono<User> dbUserMono = userRepository.findByEmail(userRegistrationDto.getEmail());
    return dbUserMono.map(dbUser -> Mono.error(new AlreadyRegisteredException())).or(
                settingsMono.map(
                    settings -> validateDtoAndCreateUser(userRegistrationDto, settings)
                ).flatMap(userRepository::save)
            );

Пользовательский репозиторий является хранилищем данных Spring ReactiveMongoRepository. Подпись validateDtoAndCreateUser: private User validateDtoAndCreateUser(UserRegistrationDto userRegistrationDto, SiteSettings siteSettings)

К сожалению на userRepository::save Я получаю:

Bad return type in method reference: cannot convert reactor.core.publisher.Mono<S> to reactor.core.publisher.Mono<? extends R>

Что я делаю не так? Я где-то использую плохой оператор?

1 Ответ

0 голосов
/ 04 ноября 2018

Сделай так:

return dbUserMono.flatMap(dbUser -> Mono.<User>error(new AlreadyRegisteredException()))
                 .switchIfEmpty(settingsMono.map(
                    settings -> validateDtoAndCreateUser(userRegistrationDto, settings)
                  ).flatMap(userRepository::save));
...