“文本/事件流”和“应用程序/流+ json”

时间:2018-08-30 13:55:59

标签: java spring-webflux project-reactor

@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 个答案:

答案 0 :(得分:2)

TL; DR:该dzone文章是错误的,Rossen的讲话是正确的。

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

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