我得到这个错误:方法flatMap()在类型Mono不适用的参数((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);
});
表达式(( prev)->{})
表示在flatmap调用中你的lambda实现没有返回任何东西,而flatmap契约期望应该返回? super Optional<U>
。
根据Toerktumlare的建议,portCallRepository.save(prev);
应该返回一个Optional,如果返回一个具体的值,尝试使用map
代替,如果没有返回,添加一个返回语句。