【发布时间】:2016-11-23 10:58:25
【问题描述】:
我们有一些 Spring REST API,它们从我们的后端数据库获取数据并将它们作为 JSON 数据返回给客户端。 AngularJS 是我们现在使用的客户端 JavaScript 框架。现在我们需要将一些数据保存为 Excel 文件,以便客户下载。该文件需要作为流下载,因为某些文件可能很大。这个问题有什么优雅的解决方案吗?
【问题讨论】:
标签: java angularjs json spring rest
我们有一些 Spring REST API,它们从我们的后端数据库获取数据并将它们作为 JSON 数据返回给客户端。 AngularJS 是我们现在使用的客户端 JavaScript 框架。现在我们需要将一些数据保存为 Excel 文件,以便客户下载。该文件需要作为流下载,因为某些文件可能很大。这个问题有什么优雅的解决方案吗?
【问题讨论】:
标签: java angularjs json spring rest
我假设您有一个生成 JSON 报告的端点。让我们将其命名为/api/reports/report1。所以这样的请求:
GET /api/reports/report1 HTTP/1.1
Accept: application/json
以 JSON 格式返回报告:
HTTP/1.1 200 OK
Content-Type: application/json; charset=UTF-8
[
{
"fullName": "John Doe",
"annualIncome": 100000
},
(...)
]
扩展端点以产生application/vnd.ms-excel。所以对话会是这样的:
GET /api/reports/report1 HTTP/1.1
Accept: application/vnd.ms-excel
HTTP/1.1 200 OK
Content-Type: application/vnd.ms-excel
(... binary excel data ...)
如果您想将下载内容嵌入为 HTML 链接,这将无法正常工作,因为那时无法设置 Accept 标头。
生成下载链接。这将适用于大量下载(正如您提到的那样)。但是,在这种情况下,您将需要一个不同的 URL 用于报告的 Excel 表示形式(例如 /api/reports/report1/excel 或 /api/reports/report1?format=excel)。或者您可以使用 选项 1 并将 Excel 设置为您的 enpoint 的默认 mime(当请求中的 Accept 标头设置为 */* 时)。
【讨论】: