Próbuję uzyskać całe ciało z obiektu HttpServletRequest.
Poniższy kod wygląda następująco:
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();
}
i testuję funkcjonalność z curl i wget w następujący sposób:
curl --header "MD5: abcd" -F "[email protected] http://localhost:8080/abcd.html"
wget --header="MD5: abcd" --post-data='{"imei":"351553012623446","hni":"310150","wdp":false}' http://localhost:8080/abcd.html"
Ale while ( (bytesRead = bufferedReader.read(charBuffer)) != -1 )
nic nie zwraca, więc nic nie dostaję na StringBuffer.
getReader
już zostało wezwane.Łatwy sposób z commons-io.
https://commons.apache.org/proper/commons-io/javadocs/api-2.5/org/apache/commons/io/IOUtils.html
źródło
Pamiętaj, że Twój kod jest dość hałaśliwy. Wiem, że wątek jest stary, ale wiele osób i tak go przeczyta. Możesz zrobić to samo używając biblioteki guawy z:
źródło
if(RequestMethod.POST.name().equalsIgnoreCase(...)) { ... }
Jeśli wszystko, czego chcesz, to treść żądania POST, możesz użyć takiej metody:
Kredyt na: https://stackoverflow.com/a/5445161/1389219
źródło
request.getInputStream()
nie honoruje to tak jak kodowanie znaków żądaniarequest.getReader()
. Jednak +1 dla linku.Działa to zarówno w przypadku GET, jak i POST:
źródło
Jeśli treść żądania jest pusta, oznacza to po prostu, że została już wcześniej zużyta. Na przykład, przez
request.getParameter()
,getParameterValues()
lubgetParameterMap()
połączenia. Po prostu usuń wiersze wywołujące te wywołania z kodu.źródło
curl
przykładzie, nie?To zadziała dla wszystkich metod HTTP.
źródło
W ten sposób rozwiązałem tę sytuację. Stworzyłem metodę util, która zwraca obiekt wyodrębniony z treści żądania, używając metody readValue ObjectMapper, która może odbierać czytnik.
źródło