Я пытаюсь получить все тело из объекта HttpServletRequest.
Код, за которым я следую, выглядит так:
if ( request.getMethod().equals("POST") )
{
StringBuffer sb = new StringBuffer();
BufferedReader bufferedReader = null;
String content = "";
try {
//InputStream inputStream = request.getInputStream();
//inputStream.available();
//if (inputStream != null) {
bufferedReader = request.getReader() ; //new BufferedReader(new InputStreamReader(inputStream));
char[] charBuffer = new char[128];
int bytesRead;
while ( (bytesRead = bufferedReader.read(charBuffer)) != -1 ) {
sb.append(charBuffer, 0, bytesRead);
}
//} else {
// sb.append("");
//}
} catch (IOException ex) {
throw ex;
} finally {
if (bufferedReader != null) {
try {
bufferedReader.close();
} catch (IOException ex) {
throw ex;
}
}
}
test = sb.toString();
}
и я тестирую функциональность с помощью curl и wget следующим образом:
curl --header "MD5: abcd" -F "fileupload=@filename.txt http://localhost:8080/abcd.html"
wget --header="MD5: abcd" --post-data='{"imei":"351553012623446","hni":"310150","wdp":false}' http://localhost:8080/abcd.html"
Но while ( (bytesRead = bufferedReader.read(charBuffer)) != -1 )
ничего не возвращает, поэтому я ничего не добавляю в StringBuffer.
getReader
уже было вызвано.Легкий способ с commons-io.
https://commons.apache.org/proper/commons-io/javadocs/api-2.5/org/apache/commons/io/IOUtils.html
источник
Имейте в виду, что ваш код довольно шумный. Я знаю, что эта ветка старая, но многие люди все равно ее прочитают. Вы можете сделать то же самое, используя библиотеку guava :
источник
if(RequestMethod.POST.name().equalsIgnoreCase(...)) { ... }
Если все, что вам нужно, это тело запроса POST, вы можете использовать такой метод:
Кредит: https://stackoverflow.com/a/5445161/1389219
источник
request.getInputStream()
кодировка символов запроса не соблюдается, как этоrequest.getReader()
делает. +1 хотя за ссылку.Это работает как для GET, так и для POST:
источник
Если тело запроса пусто, это просто означает, что оно уже было использовано заранее. Например, с помощью
request.getParameter()
,getParameterValues()
илиgetParameterMap()
вызова. Просто удалите из кода строки, выполняющие эти вызовы.источник
curl
примере, нет?Это будет работать для всех HTTP-методов.
источник
Так я разрешил эту ситуацию. Я создал метод util, который возвращает объект, извлеченный из тела запроса, используя метод readValue объекта ObjectMapper, который может принимать Reader.
источник