Http-ответ содержит только первый символ, введенный в HttpServletResponse.getWriter - PullRequest
0 голосов
/ 04 мая 2019

В настоящее время я пишу сервлет, который должен позволять пользователю писать собственные конечные точки отдыха. Конечные точки создают объект RestResponse, который я пытаюсь преобразовать в конечный объект HTTPServletResponse. RestResponse содержит org.json.simple.JSONObject, представляющий тело ответа. Теперь мне нужно поместить этот объект в тело HTTP-ответа.

Моя идея состоит в том, чтобы использовать PrintWriter из HTTPServletResponse. Согласно отладчику, все JSONObject заканчивается в CharBuffer PrintWriter, как и должно быть, однако в окончательном теле ответа HTTP внутри моего браузера есть только первый символ.

rest - это мой RestResponse объект, а http - мой HTTPServletResponse объект (не изменяется с момента передачи в метод 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();
}

и так далее, все дает одинаковый результат

Я отлаживал это уже несколько часов и до сих пор не понял, в чем дело, у кого-нибудь есть идея?

Приветствия

1 Ответ

0 голосов
/ 07 мая 2019

Так что моя проблема заключалась в том, что каким-то образом я установил http.setContentlength(variable), где переменная случайно была 1, поэтому очевидно, что тело будет содержать только первый символ.

...