我编写了一个通过 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);
}
这里是我的 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);
}
}
);
}
请帮我解决这个问题
您需要指定文本的响应类型
this.http.get<Data>(this.apiUrl+'/data', {observe : 'events', responseType: 'text'})