Saya mencoba untuk mendapatkan seluruh isi dari objek HttpServletRequest.
Kode yang saya ikuti terlihat seperti ini:
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();
}
dan saya menguji fungsionalitas dengan curl dan wget sebagai berikut:
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"
Tetapi while ( (bytesRead = bufferedReader.read(charBuffer)) != -1 )
tidak mengembalikan apa pun, jadi saya tidak mendapatkan apa pun yang ditambahkan di StringBuffer.
getReader
telah dipanggil.Cara mudah dengan commons-io.
https://commons.apache.org/proper/commons-io/javadocs/api-2.5/org/apache/commons/io/IOUtils.html
sumber
Ketahuilah, kode Anda cukup berisik. Saya tahu utasnya sudah tua, tetapi banyak orang akan tetap membacanya. Anda dapat melakukan hal yang sama menggunakan pustaka jambu biji dengan:
sumber
if(RequestMethod.POST.name().equalsIgnoreCase(...)) { ... }
Jika yang Anda inginkan hanyalah badan permintaan POST, Anda dapat menggunakan metode seperti ini:
Kredit ke: https://stackoverflow.com/a/5445161/1389219
sumber
request.getInputStream()
tidak menghormati pengkodean karakter permintaan sepertirequest.getReader()
halnya. 1 untuk tautannya.Ini berfungsi untuk GET dan POST:
sumber
Jika isi permintaan kosong, itu berarti sudah dikonsumsi sebelumnya. Misalnya dengan panggilan
request.getParameter()
,getParameterValues()
ataugetParameterMap()
panggilan. Hapus saja baris yang melakukan panggilan tersebut dari kode Anda.sumber
curl
contohnya, bukan?Ini akan bekerja untuk semua metode HTTP.
sumber
Saya menyelesaikan situasi itu dengan cara ini. Saya membuat metode util yang mengembalikan objek yang diekstrak dari tubuh permintaan, menggunakan metode readValue dari ObjectMapper yang mampu menerima Reader.
sumber