【发布时间】:2015-01-03 08:37:12
【问题描述】:
我正在构建一个 REST API 并面临这个问题:REST API 如何传递非常大的 JSON?
基本上,我想连接到数据库并返回训练数据。问题出在数据库中,我有 400,000 个数据。如果我将它们包装成一个 JSON 文件并通过 GET 方法,服务器会抛出堆溢出异常。
我们可以用什么方法来解决这个问题?
DBTraining trainingdata = new DBTraining();
@GET
@Produces("application/json")
@Path("/{cat_id}")
public Response getAllDataById(@PathParam("cat_id") String cat_id) {
List<TrainingData> list = new ArrayList<TrainingData>();
try {
list = trainingdata.getAllDataById(cat_id);
Gson gson = new Gson();
Type dataListType = new TypeToken<List<TrainingData>>() {
}.getType();
String jsonString = gson.toJson(list, dataListType);
return Response.ok().entity(jsonString).header("Access-Control-Allow-Origin", "*").header("Access-Control-Allow-Methods", "GET").build();
} catch (SQLException e) {
logger.warn(e.getMessage());
}
return null;
}
【问题讨论】:
-
您可能需要对数据进行分页,例如 /request/?page=1&itemsPerPage=100 并在循环中多次调用以获取所有数据。
-
也许 json 不是你的正确选择。它旨在移动小块数据,而不是整个数据库......只是我的 2c
-
@Zdravko Danev 那么除了 JSON,我还能使用哪些其他方法?我应该上传文件吗?
-
@paul.abbott.wa.us 是的,我认为这可能是最常见的方式。就像亚马逊展示商品页面一样。
-
嗯,这取决于... :) 根据您使用的数据库以及您要完成的工作,有不同和更好的选择。 json 用于在网页和网络服务器之间进行通信以移动少量数据。
标签: rest heap-memory large-data