Получить ответ веб-клиента - Spring Cloud - PullRequest
0 голосов
/ 26 июня 2019

Я использую Spring Cloud для запроса данных из другого сервиса.Итак, в основном я запрашиваю данные и хочу извлечь эти данные и назначить их другому объекту, который я буду сохранять.

Это мой код:

public Mono<Shops> save(Shops shops) {

    Mono<Shops> s = webClientBuilder.build().get()
            .uri("http://mysql-app/api/reservation-passengers/boarding-pass-data/" + shops.getBoardingPassId().toString())
            .exchange()
            .flatMap(response -> {
                Shops myShops = response.bodyToMono(Shops.class).block();
                shops.setAirportDestiny(myShops.getAirportDestiny());
                shops.setCustomerId(myShops.getCustomerId());
                return shopsRepository.save(shops);
            });
    return s;   
}

Однако я получил исключение:

java.lang.IllegalStateException: block()/blockFirst()/blockLast() are blocking, which is not supported in thread reactor-http-nio-7

Как получить данные асинхронным методом?

1 Ответ

0 голосов
/ 28 июня 2019

У меня есть решение.Мне пришлось немного изменить свой код.

public Mono<Shops> save(Shops shops) {
    Mono<BoardingPassDTO> response = webClientBuilder.build().get()
            .uri("http://mysql-app/api/reservation-passengers/boarding-pass-data/" 
                    + shops.getBoardingPassId().toString())
            .retrieve().bodyToMono(BoardingPassDTO.class);

    return response.flatMap(r ->{
            shops.setAirportDestiny(r.getAirportArrivalId());
            shops.setCustomerId(r.getPassengerId());    
            shops.setShopDate(LocalDateTime.now());
            return shopsRepository.save(shops);
        });     
}
...