2012-05-01 4 views

Répondre

0

Avez-vous essayé?

InputStreamReader isr = new InputStreamReader(exchange.getRequestBody(),"utf-8"); 
BufferedReader br = new BufferedReader(isr); 
String value = br.readLine(); 
+0

Oui, j'ai essayé. Le problème est que le corps ne se termine pas avec CR/LF. J'ai trouvé une solution en utilisant la méthode read (char []) avec la longueur du contenu et cela fonctionne approximativement. Je me demande si ce n'est pas une méthode qui effectue ce travail de lecture à la fin. – Joshua

+0

Vous devriez obtenir l'encodage des en-têtes HTTP, pas seulement supposer que c'est UTF-8. – artbristol

1

Vous pouvez utiliser Commons OI org.apache.commons.io.IOUtils.toString(InputStream, String) faire cela en une ligne. (Il peut ne pas fonctionner avec HTTP keep-alive bien)

Edit:

Si vous voulez aller directement à JSON, il y a un tas de piles de service Web qui fera le unmarshalling pour vous. Essayez

Spring: http://www.cribbstechnologies.com/2011/04/08/spring-mvc-ajax-web-services-part-2-attack-of-the-json-post/

CXF/JAX-RS: http://cxf.apache.org/docs/jax-rs-data-bindings.html#JAX-RSDataBindings-JSONsupport

+0

C'est Json. Je le déchiffre et insère les données dans une base de données MySQL. – Joshua

+0

Est-ce un moyen d'aller directement à Json? Ce serait génial! – Joshua

3
InputStreamReader isr = new InputStreamReader(t.getRequestBody(),"utf-8"); 
BufferedReader br = new BufferedReader(isr); 

// From now on, the right way of moving from bytes to utf-8 characters: 

int b; 
StringBuilder buf = new StringBuilder(512); 
while ((b = br.read()) != -1) { 
    buf.append((char) b); 
} 

br.close(); 
isr.close(); 

// The resulting string is: buf.toString() 
// and the number of BYTES (not utf-8 characters) from the body is: buf.length() 
+0

StringBuilder buf = new StringBuilder(); – Joshua

3

Si vous utilisez Spring MVC, vous pouvez utiliser l'annotation @RequestBody sur un paramètre de méthode qui est du type String. Par exemple.

@RequestMapping(value = "/something", method = RequestMethod.POST) 
public void doSomething(@RequestBody String requestBodyString) { 
    // does something.. 
} 
Questions connexes