2010-09-28 17 views
11

Sto lavorando alla mia prima applicazione Android. Ora wat voglio fare è fare una richiesta POST a un servizio restfull in esecuzione sul server e voglio che il BODY di questa richiesta sia una stringa JSon.Come si invia JSon come BODY In una richiesta POST al server da un'applicazione Android?

Sto utilizzando GSon per generare il JSon da inviare al server. Il codice che sto usando per fare la richiesta POST segue:

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); 

Il codice di risposta è di 400 RICHIESTA BAD e dal registro del server posso leggere le informazioni. dove si dice che il corpo non è stato inviato correttamente:

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 

Il codice per il lato server è un semplice Seam servizio 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; 
} 

quello che potrebbe essere sbagliato con il codice del client Android? Ho studiato il web e non ho trovato nessuna informazione veramente utile su questo argomento.

[] s

risposta

10

Spiacente ragazzi, appena scoperto che l'errore è stato sul servizio Rest. Devo cambiare per ricevere una stringa anziché l'oggetto Reader e ora funziona come previsto, il codice di riposo sul lato server ora è:

@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; 
} 

E la stringa JSON è riceve correttamente nel lato server.

Quindi, il codice Android sopra funziona come previsto.

saluti.

+3

Buon Marcos. Due giorni da adesso, contrassegna la tua risposta come accettata –

+0

Ciao Arthur, devo dirti che sono ancora un po 'persa con l'overflow dello stack. Come antipasto sembra troppa informazione per me, voglio dire, tutti i meccanici su questi punti, commenti, post, come prima impressione sembra un po 'confondere questi forum, ma ho trovato ottime informazioni usando così spero di abituarmi Presto. –

+0

Sono felice che tu abbia trovato utile questo sito, ma per favore accetta la tua risposta come risposta accettata cliccando l'icona sotto la freccia giù. Sarà evidenziato in verde quando il mouse è sopra di esso. –

Problemi correlati