Http 响应仅包含输入 HttpServletResponse.getWriter 的第一个字符

Http Response contains only first character entered into HttpServletResponse.getWriter

我目前正在编写一个 servlet,它应该允许用户编写自定义 rest 端点。端点产生一个 RestResponse 对象,我试图将其转换为最终的 HTTPServletResponse 对象。 RestResponse 包含代表响应主体的 org.json.simple.JSONObject。我现在需要将此对象放入 HTTP 响应的正文中。

我的想法是使用 HTTPServletResponsePrintWriter,根据调试器,整个 JSONObject 在 [=18= 的 CharBuffer 中结束] 因为它应该,但是在我的浏览器内的最终 HTTP 响应主体中,只有第一个字符。

rest 是我的 RestResponse 对象,http 是我的 HTTPServletResponse 对象(自提交到 servlet 的 doGet 方法后未发生变化)

我尝试使用各种不同的方法,例如:

if (rest.hasBody()) {
   //TODO this somehow fails to write a valid JSON String to the HTTP Body
   PrintWriter writer = http.getWriter();
   rest.getBody().writeJSONString(writer);
   //Here the proper json string ends in the buffer of the writer
   writer.flush();
   writer.close();
}
if (rest.hasBody()) {
   //TODO this somehow fails to write a valid JSON String to the HTTP Body
   PrintWriter writer = http.getWriter();
   writer.write(rest.getBody.toJSONString());
   //Here the proper json string ends in the buffer of the writer
   writer.flush();
   writer.close();
}
if (rest.hasBody()) {
   //TODO this somehow fails to write a valid JSON String to the HTTP Body
   PrintWriter writer = http.getWriter();
   writer.append(rest.getBody.toJSONString());
   //Here the proper json string ends in the buffer of the writer
   writer.flush();
   writer.close();
}

依此类推,结果都一样

我已经调试了几个小时了,但我仍然没有弄清楚哪里出了问题,有人知道吗?

干杯

所以我的问题是不知何故我设置了 http.setContentlength(variable) 变量意外地是 1,因此显然正文将只包含第一个字符。