복붙노트

[SPRING] Spring 5 Web Reactive - WebClient를 사용하여 Flux에서 스트리밍 된 데이터를 검색하려면 어떻게해야합니까?

SPRING

Spring 5 Web Reactive - WebClient를 사용하여 Flux에서 스트리밍 된 데이터를 검색하려면 어떻게해야합니까?

현재 Milestone (M4) 설명서에는 WebClient를 사용하여 Mono를 검색하는 방법과 예제가 나와 있습니다.

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)));

WebClient를 사용하여 Flux로 스트리밍 된 데이터 (텍스트 / 이벤트 스트림을 반환하는 서비스)를 어떻게 얻을 수 있습니까? 자동 잭슨 변환을 지원합니까?

이것은 이전의 이정표에서 내가 한 일이지만 API가 변경되어 더 이상 그것을 할 수 없다.

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

해결법

  1. ==============================

    1.새로운 API를 사용하면 다음과 같은 이점을 얻을 수 있습니다.

    새로운 API를 사용하면 다음과 같은 이점을 얻을 수 있습니다.

    final ClientRequest request = ClientRequest.GET(url)
            .accept(MediaType.TEXT_EVENT_STREAM).build();
    Flux<Alert> alerts = webClient.exchange(request)
            .retrieve().bodyToFlux(Alert.class);
    
  2. ==============================

    2.Spring 5.0.0.RELEASE를 사용하면 다음과 같이 할 수있다.

    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;
    }
    
  3. from https://stackoverflow.com/questions/41396430/spring-5-web-reactive-how-can-we-use-webclient-to-retrieve-streamed-data-in-a by cc-by-sa and MIT license