2009-06-30 8 views
3

J'essaie d'obtenir le contenu d'une requête HttpServletRequest. Voici comment je le fais:Impossible d'extraire le contenu d'une requête HttpServletRequest

// Extract the request content 
StringBuilder stringBuilder = new StringBuilder(); 
BufferedReader bufferedReader = null; 
String content = ""; 

try { 
    InputStream inputStream = request.getInputStream(); 
    if (inputStream != null) { 
     bufferedReader = new BufferedReader(new InputStreamReader(inputStream)); 
     char[] charBuffer = new char[128]; 
     int bytesRead = -1; 
     while ((bytesRead = bufferedReader.read(charBuffer)) > 0) { 
      stringBuilder.append(charBuffer, 0, bytesRead); 
     } 
    } else { 
     stringBuilder.append(""); 
    } 
} catch (IOException ex) { 
    throw ex; 
} finally { 
    if (bufferedReader != null) { 
     try { 
      bufferedReader.close(); 
     } catch (IOException ex) { 
      throw ex; 
     } 
    } 
} 

content = stringBuilder.toString(); 
System.out.println("Length: " + request.getContentLength()); 

La chaîne "contenu" est vide. Cependant, la dernière ligne affiche

Longueur: 53

qui est exactement la longueur du contenu que je me attends. Si cela aide, voici comment je déclenche cette servlet:

wget --post-data='{"imei":"351553012623446","hni":"310150","wdp":false}' http://localhost:8080/test/forward 
+0

Quel conteneur de servlet utilisez-vous? Votre code fonctionne pour moi dans Tomcat 6.0.18. –

+0

Tomcat 6.0.20 Vous obtenez quelque chose dans le "contenu"? –

+0

Comment vérifiez-vous la valeur du "contenu"? –

Répondre

2

Eh bien, j'ai finalement trouvé la réponse! Il s'avère que la valeur de "post-data" qui est donnée à wget devient le nom d'un paramètre dans la requête. En d'autres termes, si j'obtiens le nom de paramètre du premier (et seul) paramètre dans la requête, j'obtiendrai cette valeur. Le code pour l'extraire est trivial:

// Extract the post content from the request 
@SuppressWarnings("unchecked") 
Enumeration<String> paramEnum = request.getParameterNames(); 
paramEnum.hasMoreElements(); 
String postContent = (String) paramEnum.nextElement(); 

Merci à tous pour vos réponses!

Questions connexes