首页 > 解决方案 > Java Spring:在rest api中返回大字符串

问题描述

我有一个处理服务器端某些库的 Web 应用程序。有一个 REST api 可以从服务器上的这个库中执行一些函数并返回字符串。

返回的字符串可能非常大 ~ 100k 行。

我在这方面没有经验。我的问题是处理这种情况的正确方法是什么

目前我正在返回字符串中的所有内容,但我觉得我错过了一些东西

/**
 * POST /do/action
 * @param action
 */
@PostMapping("/do/action")
@Timed
public @ResponseBody String doAction(@RequestParam String action) throws URISyntaxException {
    return JSONObject.quote(actionService.doAction(action));
}

标签: javaspringrest

解决方案


我认为改善这种情况的一种方法是将其作为流发送。它至少会阻止您将所有这些数据加载到 RAM 中。

您还可以考虑压缩您的响应(例如 gzip)。它将大大减少数据的大小。

您可以做的下一件事取决于功能方面。是否可以剪切您的字符串并允许在每个请求上读取(可能是 100 行)?

也许您可以在 WS 中添加 2 个参数:您想要的行数和偏移量。也许您可以添加一些参数来过滤您不想要的行。也许每一行都有一个可以用来进行过滤的日期。您的目标必须是限制您发送的数据量,并在构建字符串时限制 I/O 或处理。我不知道您是从数据库、文件中读取字符串还是某些计算的结果。


推荐阅读