我一直遇到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;
}
}
这似乎是从请求流中读取的标准方式。我还尝试使用来自BufferedReader
的{{1}}同样的问题。
的Vivek
答案 0 :(得分:1)
这个CharStreams
对象是什么?
它似乎不知道,或关心或尊重请求字符编码。 (坏主意)
建议您使用servlet request.getReader()
而不是request.getInputStream()
(实际上只为二进制请求正文内容设计)
使用request.getReader()
至少会正确支持您的请求字符编码。
您可能希望查看的另一部分信息是request.getContentLength()
,并验证请求标头确实包含您期望的大小。