APPLICATION_STREAM_JSON_VALUE和APPLICATION_NDJSON_VALUE的区别
在使用 Spring 5 反应式 API 时,我遇到了已弃用的 MediaType APPLICATION_STREAM_JSON_VALUE,当使用它以一种流的方式显示来自 GET REST 端点的值时,它会在值出现在浏览器上时显示它们。但截至今天,文档指出它已被 APPLICATION_NDJSON_VALUE 取代,如文档中的以下文本所示:
APPLICATION_STREAM_JSON_VALUE 已弃用。从 5.3 开始,因为它源自 W3C Activity Streams 规范,该规范具有更具体的目的,并已被不同的 mime 类型替换。使用 APPLICATION_NDJSON 作为替代或任何其他以行分隔的 JSON 格式(例如 JSON 行、JSON 文本序列)。
当我检查 MediaType APPLICATION_NDJSON_VALUE 的行为时,我观察到当在浏览器上使用 GET API 时,结果不是在浏览器上实时流式传输,而是作为文件下载,您可以稍后查看。但这会以任何方式影响流媒体行为还是完全相同?APPLICATION_NDJSON_VALUE 是否也带来了其他一些意义,或者它只是 APPLICATION_STREAM_JSON_VALUE 的纯粹替代品。如果它只是一个替代品,为什么浏览器的流媒体行为会变成 Flux 下载的结果?或者让我知道我在尝试复制确切行为时是否犯了任何错误?
回答
但这会以任何方式影响流媒体行为还是完全相同?
完全一样。内容类型标头只是告诉客户端它正在提供什么类型的内容,仅此而已。浏览器将尽最大努力查看该标头并确定是显示内联内容还是下载它,但这只是“最佳猜测”,尤其是在诸如换行符分隔的 JSON 之类的合理新标准的情况下。实际上,您无论如何都不会在浏览器中打开它(而是将其作为 API 使用),因此这并不是什么大问题。
如果你真的不需要它在浏览器中下载,你可以尝试添加一个Content-Disposition: inline
标题 - 但我个人只是忽略浏览器的行为并使用更适合工作的工具(例如 curl )来使用它。