“文本/事件流”和“应用程序/流+json”之间有什么区别

2022-09-02 21:00:23
@GetMapping(path = "/cars", produces = "text/event-stream")
public Flux<Car> getCarStream() {
    System.out.println("application/stream+json");
    return this.repository.findCarsBy().log();
}

上述代码与以下代码有什么区别:

@GetMapping(path = "/cars", produces = "application/stream+json")
public Flux<Car> getCarStream() {
    System.out.println("application/stream+json");
    return this.repository.findCarsBy().log();
}

到目前为止,我发现了相互矛盾的信息:有人说它们都意味着服务器发送的事件,而另一些人则认为存在差异。


答案 1

TL;DR:那篇dzone文章是错误的,Rossen的演讲是对的。

text/event-stream是服务器发送事件 (SSE) 的官方媒体类型;它将在数据位前面加上前缀,您也可以选择前缀来更改客户端该数据段的含义。此媒体类型适用于浏览器,因为它们支持使用 JavaScript API。data:EventSource

application/stream+json用于服务器到服务器/http客户端(任何不是浏览器的东西)通信。它不会作为数据的前缀,而只会使用 CRLF 来拆分数据片段。请注意,Spring团队正在重新考虑该媒体类型,因为SPR-16742(不要犹豫,在那里发表评论!

更新:现在是流式传输 JSON 值的首选媒体类型。application/x-ndjson


答案 2

推荐