У меня есть функция HandlerFunction, которая принимает POST-запрос BookingRecord. Я получаю Mono от ServerRequest с помощью bodyToMono (), а затем подписываюсь на Mono, поскольку мне нужен тип BookingRecord, чтобы вызвать службу REST, чтобы вернуть Mono "" с помощью WebClient. Я объявил тариф как переменную экземпляра, чтобы использовать его в операторе возврата.
public class BookingHandler
{
private Mono<Fare> fare;
private WebClient webClient= = WebClient.create("http://localhost:8080");
public HandlerFunction<ServerResponse> book = request -> {
request.bodyToMono(BookingRecord.class)
.subscribe(br ->
{
fare = this.webClient.get()
.uri("/fares/get/{flightNumber}/{flightDate}", br.getFlightNumber(), br
.getFlightDate())
.retrieve()
.bodyToMono(Fare.class);
});
return ServerResponse.ok()
.body(BodyInserters.fromPublisher(fare, Fare.class));
};
}
Но этот код не работает. Подписка не выполняется !! Это почему?
Мне пришлось изменить его на код ниже, чтобы он работал !.
request.bodyToMono(BookingRecord.class)
.subscribe(br ->
{
flightNumber = br.getFlightNumber();
flightDate = br.getFlightDate();
});
fare = this.webClient.get()
.uri("/fares/get/{flightNumber}/{flightDate}", flightNumber, flightDate)
.retrieve()
.bodyToMono(Fare.class);
Так почему же мой первый код не вызывает подписку? Я использую SpringBoot 2.1.0.M4.