有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

方法引用中的java错误返回类型:无法转换反应器。果心出版商单核反应堆。果心出版商单声道?扩展R>

我有两个Mono-s,如果其中一个不是空的(用户已经存在),我想返回/抛出一个异常,或者基于另一个返回一个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)
            );

userRepository是一个Spring数据反应MongoRepository。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) 个答案

  1. # 1 楼答案

    这样做:

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