Estoy tratando de obtener todo el cuerpo del objeto HttpServletRequest.
El código que estoy siguiendo se ve así:
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();
}
y estoy probando la funcionalidad con curl y wget de la siguiente manera:
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"
Pero while ( (bytesRead = bufferedReader.read(charBuffer)) != -1 )
no devuelve nada, por lo que no obtengo nada agregado en StringBuffer.
getReader
ya se ha llamado.Manera fácil con commons-io.
https://commons.apache.org/proper/commons-io/javadocs/api-2.5/org/apache/commons/io/IOUtils.html
fuente
Tenga en cuenta que su código es bastante ruidoso. Sé que el hilo es antiguo, pero mucha gente lo leerá de todos modos. Puedes hacer lo mismo usando la biblioteca guava con:
fuente
if(RequestMethod.POST.name().equalsIgnoreCase(...)) { ... }
Si todo lo que desea es el cuerpo de la solicitud POST, puede usar un método como este:
Crédito a: https://stackoverflow.com/a/5445161/1389219
fuente
request.getInputStream()
no respeta la codificación de caracteres de solicitud como lorequest.getReader()
hace. Sin embargo, +1 para el enlace.Esto funciona tanto para GET como para POST:
fuente
Si el cuerpo de la solicitud está vacío, simplemente significa que ya se ha consumido de antemano. Por ejemplo, mediante a
request.getParameter()
,getParameterValues()
ogetParameterMap()
llamar. Simplemente elimine las líneas que realizan esas llamadas de su código.fuente
curl
ejemplo, ¿no?Esto funcionará para todos los métodos HTTP.
fuente
Resolví esa situación de esta manera. Creé un método util que devuelve un objeto extraído del cuerpo de la solicitud, usando el método readValue de ObjectMapper que es capaz de recibir un Reader.
fuente