#java #spring-webflux #reactor-netty
#java #spring-webflux #реактор-нетти
Вопрос:
У меня есть следующая функция
public Mono<CarAndShip> getCarAndShip(Long id) {
Mono<Car> carMono = carService.getCar(id).subscribeOn(Schedulers.elastic());
Mono<Ship> shipMono = shipService.getShip(id).subscribeOn(Schedulers.elastic());
return Mono.zip(carMono, shipMono)
.flatMap(zipMono -> {
return new CarAndShip(zipMono.getT1(), zipMono.getT2());
});
IntelliJ жалуется на оператор return, который:
Required type: Mono <CarAndShip>
Provided: Mono <Object> no
instance(s) of type variable(s) R exist so that CarAndShip conforms to Mono<? extends R>
Как мне ввести приведение к требуемому CarAndShip
типу возвращаемого значения?
Комментарии:
1. Как выглядит ваш
CarAndShip
класс? Почему бы просто не вернутьсяMono<Tuple2<Car, Ship>>
?
Ответ №1:
Требуемый тип: Mono Предоставлено: Mono не существует экземпляров переменных типа R, чтобы распределение соответствовало Mono<? расширяет R>
Как указано в исключении: вы не предоставляете Mono.
Так что либо используйте map
вместо flatMap
:
return Mono.zip(carMono, shipMono)
.map(zipMono -> new CarAndShip(zipMono.getT1(), zipMono.getT2()));
или предоставить Mono (вероятно, здесь не лучший способ):
return Mono.zip(carMono, shipMono)
.flatMap(zipMono -> Mono.just(new CarAndShip(zipMono.getT1(), zipMono.getT2())));
Ответ №2:
В этом примере вы должны использовать map()
вместо flatMap()
, поскольку вы не возвращаете a Mono
.