Spring 5 Web Reactive - Как мы можем использовать WebClient для получения потоковых данных в Flux?

Документация по текущей вехе (M4) показывает и пример того, как получить Mono с помощью WebClient:

WebClient webClient = WebClient.create(new ReactorClientHttpConnector());

ClientRequest<Void> request = ClientRequest.GET("http://example.com/accounts/{id}", 1L)
                .accept(MediaType.APPLICATION_JSON).build();

Mono<Account> account = this.webClient
                .exchange(request)
                .then(response -> response.body(toMono(Account.class)));

Как мы можем получить потоковые данные (из службы, которая возвращает text/event-stream) в Flux с помощью WebClient? Поддерживает ли он автоматическое преобразование Джексона ?.

Вот как я делал это на предыдущем этапе, но API изменился и больше не могу найти, как это сделать:

final ClientRequest<Void> request = ClientRequest.GET(url)
    .accept(MediaType.TEXT_EVENT_STREAM).build();
Flux<Alert> response = webClient.retrieveFlux(request, Alert.class)

person codependent    schedule 30.12.2016    source источник
comment
Текущая веха - M4 ... Так что вы, возможно, захотите еще раз проверить документацию, в выпуске M4 было проделано много работы для завершения реактивных функций.   -  person M. Deinum    schedule 30.12.2016
comment
Я проверил его и даже текущий снимок, но подробностей об этом нет.   -  person codependent    schedule 30.12.2016
comment
Я проверил Spring Framework 5 RC3, и похоже, что ClientRequest сейчас не имеет метода GET   -  person Sergiy    schedule 03.08.2017
comment
@Sergey, посмотри на новый ответ.   -  person codependent    schedule 04.08.2017


Ответы (2)


Вот как вы можете добиться того же с новым API:

final ClientRequest request = ClientRequest.GET(url)
        .accept(MediaType.TEXT_EVENT_STREAM).build();
Flux<Alert> alerts = webClient.exchange(request)
        .retrieve().bodyToFlux(Alert.class);
person Brian Clozel    schedule 07.01.2017
comment
Я думаю, что нет retrieve () с обменом - person Chandresh Mishra; 27.07.2020

В Spring 5.0.0.RELEASE вы это делаете следующим образом:

public Flux<Alert> getAccountAlerts(int accountId){
    String url = serviceBaseUrl+"/accounts/{accountId}/alerts";
    Flux<Alert> alerts = webClient.get()
        .uri(url, accountId)
        .accept(MediaType.APPLICATION_JSON)
        .retrieve()
        .bodyToFlux( Alert.class )
        .log();
    return alerts;
}
person codependent    schedule 04.08.2017