APPLICATION_STREAM_JSON_VALUE 和 APPLICATION_NDJSON_VALUE 之间的区别

Difference between APPLICATION_STREAM_JSON_VALUE and APPLICATION_NDJSON_VALUE

在使用 Spring 5 reactive APIs 时,我遇到了已弃用的 MediaType APPLICATION_STREAM_JSON_VALUE ,它在使用时以流式的方式显示来自 GET REST 端点的值,即显示在浏览器上出现的值。但是截至今天,文档指出它已根据文档中的以下文本被 APPLICATION_NDJSON_VALUE 替换:

APPLICATION_STREAM_JSON_VALUE Deprecated. as of 5.3 since it originates from the W3C Activity Streams specification which has a more specific purpose and has been since replaced with a different mime type. Use APPLICATION_NDJSON as a replacement or any other line-delimited JSON format (e.g. JSON Lines, JSON Text Sequences).

当我检查 MediaType APPLICATION_NDJSON_VALUE 的行为时,我观察到在浏览器上使用 GET API 时,不是在浏览器上实时流式传输,而是将结果下载为文件,您可以稍后查看。但这会以任何方式影响流式传输行为还是完全相同? APPLICATION_NDJSON_VALUE 是否也带来了一些其他意义,或者它只是 APPLICATION_STREAM_JSON_VALUE 的纯粹替代品。如果它只是一个替换,为什么浏览器流式传输行为会更改为 Flux 下载的结果?或者如果我在尝试复制确切的行为时犯了任何错误,请告诉我?

But does that in any way impact the streaming behaviour or is it exactly the same?

一模一样。内容类型 header 只是告诉客户端它提供的内容类型,仅此而已。浏览器将尽最大努力查看 header 并确定是显示内联内容还是下载它,但这只是“最佳猜测”,尤其是在换行分隔 JSON.实际上,您永远不会在浏览器中打开它(而是将其作为 API 使用),所以这没什么大不了的。

如果你真的需要它而不是在浏览器中下载,你可以尝试添加一个 Content-Disposition: inline header - 但就我个人而言,我只是忽略浏览器的行为并使用工具更多地使用它适合这份工作(例如 curl)。