Пост-вызовы службы отдыха не работают с Spring Webclient

Мне нужно вызвать службу отдыха асинхронно, и я подумал об использовании веб-клиента spring reactive вместо AsyncRestTemplate. Однако мой URL-адрес вообще не вызывается с приведенным ниже кодом.

Mono<Test> asyncResponse = webClientBuilder.build().post().uri(url).contentType(MediaType.APPLICATION_JSON)
                .header("h1", h1).header("h2", h2)
                .body(BodyInserters.fromObject(request))
                .retrieve().bodyToMono(Test.class);

Однако, если я делаю то же самое синхронно, все работает нормально.

webClientBuilder.build().post().uri(url).contentType(MediaType.APPLICATION_JSON)
                .header("h1", h1).header("h2", h2)
                .body(BodyInserters.fromObject(request))
                .exchange();`

Что я делаю неправильно?


person Ananya Antony    schedule 31.03.2020    source источник


Ответы (1)


exchange не означает синхронный. Он отвечает Mono. Вам нужно где-то subscribe() или block() ваш поток.

Разница между exchange и retrieve заключается в следующем: они различаются типами возвращаемых данных; метод обмена предоставляет ClientResponse вместе с его статусом и заголовками, в то время как метод получения - это кратчайший путь к непосредственной выборке тела. вы можете сослаться на это

person JK.Lee    schedule 31.03.2020