我正在使用 Spring Boot 版本 2.7.10 和
WebFlux
。
我有一个 Object
列表,我想迭代列表中的每个元素,对于每个元素,将对象序列化为 JSON 并将 JSON {...}
发送到 Web 浏览器客户端。
这是 Spring 控制器代码:
@RequestMapping(path = "/test", method = RequestMethod.GET, produces = MediaType.TEXT_EVENT_STREAM_VALUE)
public void Flux<String> createFluxForCoverageOrLayerObject(List<Object> objects) throws PetascopeException {
Flux<String> result =
Flux.fromIterable(objects)
.map(object -> {
String jsonObj = this.createProprietaryObjectInJson(object);
return Optional.of(jsonObj);
})
.filter(Optional::isPresent) // Filter out Optional.empty() values
.map(Optional::get) // Unwrap the value from the Optional
.concatWith(Mono.just("Complete")) // Signal the end of the stream
.doOnComplete(() -> log.debug("Proprietary Capabilities stream has completed sending all items."));
return result;
}
在客户端,我使用带有
fetch()
API 的 javascript 代码,并且在收到的消息中始终以 data:
作为前缀。
我知道这是 SSE(服务器发送事件)标准的一部分,但是我怎样才能从服务器端摆脱它
data:
并且它不会破坏 WebFlux 的流媒体功能?
换句话说,是强制将数据:发送给客户端吗?
由于
data:
属于标准,所以我决定保持原样,在客户端中,它可以在收到消息时用空字符串替换data:
。