上一页)->{}),java-8,spring-webflux"/>

首页 > 解决方案 > Mono 类型中的方法 flatMap()不适用于参数 ((上一页)->{})

问题描述

我收到此错误: Mono 类型中的方法 flatMap() 不适用于参数 (( prev)->{})

public Mono<PortCall> updateByFindById(String gsisKey, PortCall portCall) {
    PortCall next = portCallRepository.findById(portCall.getNextPortCall().getNextScheduleEntryKey()).toProcessor().block();
    return portCallRepository.findById(gsisKey)
            .switchIfEmpty(Mono
                    .error(new DataNotFoundException(HttpStatus.NOT_FOUND, PortCallConstants.PORT_CALL_NOT_FOUND)))
            .flatMap(retrivedPortCall -> {
                
                PortCall prev1 = portCallRepository.findById(retrivedPortCall.getPreviousPortCall()
                        .getPreviousScheduleEntryKey()).flatMap(prev->{
                             prev.setNextSiteCode("");
                             prev.getNextPortCall().setNextScheduleEntryKey(next.getGsisKey());
                             prev.getNextPortCall().setTerminalCode(next.getSiteRkstCode());
                             prev.getNextPortCall().setCityCode(next.getCityCode());
                             prev.getNextPortCall().setCityName(next.getCity());
                             prev.getNextPortCall().setTerminalName(next.getSiteName());
                             prev.getNextPortCall().setArrivalVoyage(next.getArrivalVoyageCode());
                             prev.getNextPortCall().setDepartureVoyage(next.getDepartureVoyageCode());
                             portCallRepository.save(prev);
                        });

标签: java-8spring-webflux

解决方案


该表达式(( prev)->{})表示您没有在 flatmap 调用中使用 lambda 实现返回任何内容,而 flatmap 合约期望? super Optional<U>应该返回。

正如Toerktumlare建议的那样,portCallRepository.save(prev);应该返回一个 Optional,如果返回一个具体值,请尝试使用map而不是返回,或者如果没有返回,请添加一个 return 语句。


推荐阅读