J'essaye d'obtenir le corps entier de l'objet HttpServletRequest.
Le code que je suis ressemble à ceci:
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();
}
et je teste la fonctionnalité avec curl et wget comme suit:
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"
Mais le while ( (bytesRead = bufferedReader.read(charBuffer)) != -1 )
ne renvoie rien, donc je n'ai rien ajouté sur StringBuffer.
getReader
a déjà été appelé.Un moyen simple avec commons-io.
https://commons.apache.org/proper/commons-io/javadocs/api-2.5/org/apache/commons/io/IOUtils.html
la source
Sachez que votre code est assez bruyant. Je sais que le fil est vieux, mais beaucoup de gens le liront de toute façon. Vous pouvez faire la même chose en utilisant la bibliothèque goyave avec:
la source
if(RequestMethod.POST.name().equalsIgnoreCase(...)) { ... }
Si tout ce que vous voulez est le corps de la requête POST, vous pouvez utiliser une méthode comme celle-ci:
Crédit à: https://stackoverflow.com/a/5445161/1389219
la source
request.getInputStream()
cela n'honore pas le codage des caractères de la demande comme lerequest.getReader()
fait. +1 pour le lien cependant.Cela fonctionne pour GET et POST:
la source
Si le corps de la requête est vide, cela signifie simplement qu'il a déjà été consommé au préalable. Par exemple, par un
request.getParameter()
,getParameterValues()
ou ungetParameterMap()
appel. Supprimez simplement les lignes effectuant ces appels de votre code.la source
curl
exemple, non?Cela fonctionnera pour toutes les méthodes HTTP.
la source
J'ai résolu cette situation de cette manière. J'ai créé une méthode util qui renvoie un objet extrait du corps de la requête, en utilisant la méthode readValue d'ObjectMapper capable de recevoir un Reader.
la source