无法在 Angular 中订阅 WebFlux 流

问题描述 投票:0回答:1

我编写了一个通过 WebFlux(Spring boot)的 Flux 生成流的服务器。提供流的方法

public Flux<Data> getStream() {

        Flux<Data> initialData = Flux.just(this.data);

        Flux<Data> periodicData = Flux.interval(Duration.ofSeconds(60))
                .map(tick -> this.data);

        return Flux.concat(initialData, periodicData);
}

我还定义了一个请求处理程序:


public Mono<ServerResponse> streamData(ServerRequest request) {
        return ServerResponse.ok()
                .contentType(MediaType.TEXT_EVENT_STREAM)
                .body(DataService.getStream(), Data.class);
}

还有一个请求路由器:

RouterFunction<?> routes (RequestHandler requestHandler) {
        return RouterFunctions
                .route(RequestPredicates
                        .GET("/data"),
                        requestHandler::streamData);
}

当我使用邮递员时,我可以轻松订阅此流 enter image description here

但是当我尝试用我的角度客户端订阅这个流时,我得到了这个 enter image description here

这里是我的 Angular 版本的 Webflux 客户端

getStream() {
    return this.http.get<Data>(this.apiUrl+'/data', {observe : 'events'}).subscribe(
      (event : HttpEvent<Data>) => {
        if (event.type === HttpEventType.Response){
          console.log('Message : ', event.body);
        }
      }
    );
  }

请帮我解决这个问题

angular spring-boot rxjs spring-webflux reactive
1个回答
0
投票

您需要指定文本的响应类型

this.http.get<Data>(this.apiUrl+'/data', {observe : 'events', responseType: 'text'})
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.