我正在创建一个以JSON格式提供大型报告的Java Rest Web服务。这可能大到几百万行。实现Web服务的最佳方式是将高效的数据作为响应发送给客户端。由于我无法将记录集转换为内存中的JSON,因为它会在GC上创建负载。如何将Java rest web服务的大量响应数据传递给客户端?
1
A
回答
1
这一切都取决于执行裹成结构的背景下:)
如果你所服务的数据作为JSON(和假设你是通过“运动衫”标签),我建议你发送的对象(报告行)分页功能。
{
"current-page" : (num),
"max-pages" : (numOfAllPages),
"rows" : [{
{(row1)}, {(row2)}, {(row...n)},
}]
}
和您的REST处理程序接受查询参数,如:网页=(NUM)
除非,你需要一次发送的所有行。如果你这样做 - 我建议直接写入?响应流,为用户设置正确的响应头以触发“下载”操作。
1
有几个解决方案 首先是分页作为Miron指出。
第二个Chunky输出 您使用ChunkyOutput类发送它。在这个客户端还需要消耗为ChunkyInput
@Path("/chunkyresource")
public class ResourceSentAsChunks {
@GET
public ChunkedOutput<String> chunkedGet() {
System.out.println("ResourceSentAsChunks.chunkedGet()");
final ChunkedOutput<String> output = new ChunkedOutput<String>(String.class);
new Thread() {
@Override
public void run() {
try {
for (int i = 0; i < 100000; i++) {
output.write(i + " ");
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
output.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}.start();
return output;
}
三使用压缩,如果你可以作为附件发送,或者如果你有自己的客户端应用程序你的回应。这种技术相当广泛地用于图像的情况。
相关问题
- 1. 如何将大量数据传递给Web服务
- 2. 将数据PHP(客户端)传递给C#(服务器端)
- 3. 将客户端JavaScript变量传递给服务器端php
- 4. 如何将用户会话传递给REST Web服务
- 5. SignalR - 将客户端的响应传递回服务器
- 6. 从android客户端向web服务器传递数据?
- 7. 如何从JavaScript客户端传递参数给WCF Rest服务的方法?
- 8. 如何将客户端对象传递给WCF服务
- 9. 如何将工作流服务例外传递给客户端
- 10. 从Delphi客户端向/从Web服务传递数据
- 11. angular 2如何将服务响应数据传递给UI
- 12. 如何将权限/授权数据传递给客户端Javascript?
- 13. Java Web服务客户端
- 14. Web服务客户端Java
- 15. Java Web服务客户端:
- 16. java web服务客户端
- 17. 客户端应该如何将Facebook访问令牌传递给服务器?
- 18. REST Web服务的JavaScript/jQuery客户端
- 19. 将数据从cherrypy服务器端传递到javascript客户端
- 20. 将客户端数据传递到服务器端方法
- 21. 如何将可变数量的参数传递给Web服务
- 22. 从代理客户端将参数传递给WCF服务Ctor
- 23. Soap客户端使用Rest Web服务
- 24. 编写REST Web服务客户端
- 25. 将客户端值传递给服务器端
- 26. 如何将大量数据从数据库返回给Web客户端?
- 27. 从Java Web服务获取对VB.NET客户端的响应
- 28. Java客户端无法从wcf rest服务读取大的响应
- 29. 如何在客户端模拟REST服务响应?
- 30. 如何将数据传递给高级REST客户端Chrome扩展
还要确保在服务器上启用gzip –
有几个我们可以使用的头文件 - 这又取决于人们如何解决问题。 在下载大包的情况下,它是有用的使用: - 内容传输:gzip,deflate(阅读该解决方案的优点和缺点!!) - content-transfer:chunked - accept-ranges:bytes –