2010-09-28 7 views
11

Je travaille sur ma première application Android. Maintenant, wat je veux faire est de faire une requête POST à ​​un service de restitution en cours d'exécution sur le serveur et je veux que le corps de cette demande soit une chaîne JSon. J'utilise GSon pour générer le JSon à envoyer au serveur. Le code que je utilise pour faire la demande POST suit:Comment envoyer JSon en tant que BODY Dans une requête POST envoyée au serveur à partir d'une application Android?

HttpPost requisicao = new HttpPost(); 
requisicao.setURI(new URI(uri)); 
requisicao.setHeader("User-Agent", sUserAgent); 
requisicao.setHeader("Content-type", "application/json"); 
HttpResponse resposta = null; 
//I can see the json correctly print on log with the following entry. 
Log.d(TAG, "JSon String to send as body in this request ==>> " + jsonString); 
//than I try to send JSon using setEntityMethod 
StringEntity sEntity = new StringEntity(jsonString, "UTF-8"); 
requisicao.setEntity(sEntity); 

resposta = httpClient.execute(requisicao); 
resultado = HttpProxy.leRespostaServidor(resposta); 

Le code de réponse est 400 BAD REQUEST et du journal du serveur que je peux lire l'info. où il dit que le corps n'a pas été correctement envoyé:

13:48:22,524 ERROR [SynchronousDispatcher] Failed executing POST /peso/cadastrar/[email protected] 
org.jboss.resteasy.spi.BadRequestException: Could not find message body reader for type: class java.io.Reader of content type: application/json 

Le code du côté serveur est un simple service Seam Rest:

@POST 
@Path("/cadastrar/{userEmail}") 
@Consumes(MediaType.APPLICATION_JSON) 
public String cadastraPeso(@PathParam("userEmail") String email, Reader jsonString) 
{ 
    LineNumberReader lnr = new LineNumberReader(jsonString); 
    try { 
    String json = lnr.readLine(); 
    if(json != null) 
    { 
    log.debug("String json recebida do device ==>> " + json); 
    } 
    } catch (IOException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
    } 
    return "OK - o e-mail processado foi ==>> " + email; 
} 

ce qui pourrait être mal avec le code client Android? J'ai fait des recherches sur le web et n'ai trouvé aucune information vraiment utile sur ce sujet.

[] de

Répondre

10

Désolé les gars, juste se sont avérés que l'erreur était sur le service Rest. Je changer pour recevoir une chaîne au lieu de l'objet Reader et maintenant il fonctionne comme prévu, le code reste sur le côté serveur est maintenant:

@POST 
@Path("/cadastrar/{userEmail}") 
@Consumes(MediaType.APPLICATION_JSON) 
public String cadastraPeso(@PathParam("userEmail") String email, String jsonString) 
{ 
     String json = jsonString; 
     if(json != null) 
     { 
      log.debug("String json recebida do device ==>> " + json); 
     } 
     return "OK - o e-mail processado foi ==>> " + email; 
} 

Et la chaîne JSON est reçu correctement dans le côté serveur.

Ainsi, le code Android ci-dessus fonctionne comme prévu.

ce qui concerne.

+3

Bonne Marcos. Deux jours à partir de maintenant, marquez votre propre réponse comme acceptée –

+0

Salut Arthur, je dois vous dire que je suis encore un peu perdu en utilisant le débordement de la pile. En tant que débutant, il semble trop d'informations pour moi, je veux dire, tous les mécanismes sur ces points, commentaires, messages, comme une première impression semble un peu confondre ces forums, mais j'ai trouvé beaucoup d'informations en utilisant ainsi j'espère rapide. –

+0

Je suis content que vous trouviez ce site utile, mais s'il vous plaît acceptez votre propre réponse comme une réponse acceptée en cliquant sur l'icône ci-dessous la flèche vers le bas. Il sera surligné en vert lorsque votre souris est dessus. –

Questions connexes