Вы на самом деле не передаете конкретное тело запроса, а только указатель на него (который в данном конкретном случае находится под сетевым сокетом). Таким образом, когда его читают в другом месте или когда вы читаете его после , определенный запрос был обработан, тогда он больше не будет содержать ничего. Он вернется -1
или будет уже закрыт.
Вам нужно прочитать это в byte[]
и вместо этого передать.
ByteArrayOutputStream output = new ByteArrayOutputStream();
InputStream input = request.getInputStream();
byte[] buffer = new byte[1024];
for (int length = 0; (length = input.read(buffer)) > -1;)
output.write(buffer, 0, length);
}
byte[] bytes = output.toByteArray();
// Now store bytes in your `ArrayList`.
Вам нужно только знать, что таким образом запросы POST не могут больше обрабатываться вашим сервлетом, потому что вы использовали все, что отправил клиент. Клиент не собирается повторно отправлять один и тот же запрос несколько раз. Вам нужно будет сделать копию этого. Как этого добиться, зависит от функциональных требований, о которых вы ничего не сказали в своем вопросе. Возможно, есть другие / лучшие способы, такие как просто регистрация request.getParameterMap()
.