gpt4 book ai didi

java - 无法读取格式为 application/json 的整个 POST 请求正文内容

转载 作者:行者123 更新时间:2023-12-01 10:37:06 25 4
gpt4 key购买 nike

我在 Jetty 处理 application/json 格式的请求正文数据时遇到问题。本质上,当 Jetty 处理请求体时,请求数据就被切断了。

我有一个相对较大的 POST 正文,大约 74,000 字节。根据我在网上找到的一些建议,我实例化了一个新的上下文处理程序,并将 setMaxFormContentSize 属性设置为足够大的 500,000 字节。

    ServletContextHandler handler = new ServletContextHandler(server, "/");
handler.setMaxFormContentSize(500000);

但是,这似乎无法正常工作。我还在网上读到,此属性可能仅适用于表单编码数据,不适用于 application/json,这是我们应用程序的严格要求。

有什么办法可以避免这个问题吗?是否有一些特殊的约束类,我可以对其进行子类化,以允许处理大小增加到至少 500KB?

编辑#1:我应该补充一点,我还尝试将限制的大小降低到 5 个字节,看看它是否会切断有效负载中的更多数据。这也不起作用,这似乎意味着这肯定完全忽略了该属性。

编辑#2:这是我从请求流中读取信息的地方。

@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
try {
String json = CharStreams.toString(new InputStreamReader(req.getInputStream()));
....
} catch (Exception e) {
logger.error("Exception in internal api forwarder", e);
throw e;
}
}

这似乎是从请求流读取的标准方法。我还尝试使用 req.getReader() 中的 BufferedReader 来解决同样的问题。

维韦克

最佳答案

这个 CharStreams 对象是什么?

它似乎不知道、不关心、也不尊重请求的字符编码。 (坏主意)

建议您使用servlet request.getReader()而不是 request.getInputStream() (实际上只为二进制请求正文内容设计)

使用 request.getReader() 至少可以正确支持您的请求字符编码。

您可能想要查看的另一条信息是 request.getContentLength()并验证请求 header 确实包含您期望的大小。

关于java - 无法读取格式为 application/json 的整个 POST 请求正文内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34620581/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com