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

Jetty是否限制JSON响应长度?Java Spark迁移后JSON截断问题咨询

解决Jetty下Spark应用大JSON响应截断问题

调整Jetty响应缓冲区大小

Jetty默认的响应输出缓冲区容量有限,大体积JSON响应可能因缓冲区不足被截断。可以通过代码配置Jetty的响应缓冲区:

// 初始化Spark后获取Jetty服务器实例
Server server = (Server) Spark.awaitInitialization();
for (Connector connector : server.getConnectors()) {
    if (connector instanceof ServerConnector) {
        HttpConnectionFactory httpConnFactory = connector.getConnectionFactory(HttpConnectionFactory.class);
        HttpConfiguration httpConfig = httpConnFactory.getHttpConfiguration();
        // 根据实际需求设置缓冲区大小,示例设为10MB
        httpConfig.setResponseBufferSize(10 * 1024 * 1024);
    }
}

改用流式输出JSON

避免将完整的大JSON字符串加载到内存后再返回,改用流式输出直接写入响应流,彻底绕过内存和缓冲区限制:

get("/large-json", (req, res) -> {
    res.type("application/json");
    // 通过响应流逐段写入JSON内容
    try (OutputStreamWriter writer = new OutputStreamWriter(res.raw().getOutputStream(), StandardCharsets.UTF_8)) {
        // 这里替换为你的JSON生成逻辑,比如从数据库或文件逐行读取写入
        writeLargeJsonToStream(writer);
        writer.flush();
    }
    return ""; // 已通过流输出内容,返回空字符串即可
});

排查压缩与版本兼容性问题

  • 如果开启了Gzip压缩,暂时关闭测试是否是压缩过程导致的截断:
    // 注释掉Gzip相关配置,比如:
    // httpConfig.addCustomizer(new GzipHandler());
    
  • 检查Spark与内嵌Jetty的版本兼容性,升级到Spark 3.x等稳定版本,部分旧版本存在大响应处理的bug。

验证响应完整性

用curl -i http://your-server/large-json查看响应头的Content-Length值,对比实际生成的JSON大小,确认是否是服务器端截断还是客户端显示限制。

内容的提问来源于stack exchange,提问作者BugsOverflow

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 14:52:16