java - 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));
}
解决方案
我认为改善这种情况的一种方法是将其作为流发送。它至少会阻止您将所有这些数据加载到 RAM 中。
您还可以考虑压缩您的响应(例如 gzip)。它将大大减少数据的大小。
您可以做的下一件事取决于功能方面。是否可以剪切您的字符串并允许在每个请求上读取(可能是 100 行)?
也许您可以在 WS 中添加 2 个参数:您想要的行数和偏移量。也许您可以添加一些参数来过滤您不想要的行。也许每一行都有一个可以用来进行过滤的日期。您的目标必须是限制您发送的数据量,并在构建字符串时限制 I/O 或处理。我不知道您是从数据库、文件中读取字符串还是某些计算的结果。
推荐阅读
- php - 我可以为 1 SELECT (mysql) 做多个 WHERE 吗?
- amazon-web-services - S3 存储桶策略中的 AWS 多个 CloudFront 分配
- arrays - 读取C中的数字数组
- javascript - 如何在 Axios 请求中包含重复的表单数据值?
- python - 使用结构同时在多个主机上运行脚本
- vue.js - How to replace css class name partially in Vue?
- android - Android BLE特性getValue是没有任何反应?
- java - 如何从 Java 中的子类访问私有数组?
- php - 错误的 DigestValue:“哈希值不匹配”XML 与 PHP
- php - Laravel dompdf 转换为 pdf 时无法正确显示视图