You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot下REST流式数据读取异常及测试方法咨询

问题分析与解决方案

一、调用代码的错误点

  1. 响应格式不匹配
    主应用接口输出的是连续无分隔的JSON对象,而调用端用readLine()读取——该方法需要遇到换行符才会返回数据。但主应用代码仅写入JSON字符串,未添加换行,导致readLine()会一直阻塞,直到整个流结束才会读到完整数据。
  • 修复方案:在主应用的写入逻辑中,每个JSON对象后添加换行符:
    writer.write(objectMapper.writeValueAsString(trx));
    writer.write("\n"); // 添加换行分隔符
    writer.flush();
    
  1. HttpURLConnection缓冲问题
    默认情况下,HttpURLConnection会缓冲整个响应,不会实时返回流式数据。需要禁用缓冲并开启分块传输:
  • 添加配置代码:
    connection.setChunkedStreamingMode(1024); // 启用分块传输,设置块大小
    connection.setUseCaches(false); // 禁用缓存
    
  1. 请求输出流未关闭
    调用端写完请求体(filter数据)后,未关闭输出流,主应用可能会一直等待请求体完整,无法触发响应发送。
  • 修复方案:写完数据后关闭输出流:
    OutputStream os = connection.getOutputStream();
    os.write(objectMapper.writeValueAsBytes(filter));
    os.flush();
    os.close();
    

二、接口测试方法

  1. Postman支持流式接口测试
    创建POST请求,填写接口URL,设置Content-Type为application/json,在Body中填入TrxFilter的JSON内容。发送请求后,在响应面板切换至「Stream」模式(部分版本需在设置中开启流式响应显示),即可实时查看每一条返回的JSON数据。

  2. curl命令测试
    使用-N参数禁用缓冲,实时输出响应内容:

curl -X POST -H "Content-Type: application/json" -d '{"key":"value"}' -N http://.../repeng/getTransactions/{id}/{batchSize}
  1. 自定义测试程序
    可使用Java 11+的HttpClient或OkHttp编写测试代码,这类库对流式响应的支持更友好,能实时处理每一块返回的数据。

内容的提问来源于stack exchange,提问作者Tomáš Pavlík

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 15:45:40