Подтвердить что ты не робот

Как отправить JSon как BODY В запросе POST на сервер из приложения Android?

Я работаю над своим первым Android-приложением. Теперь ват, который я хочу сделать, - это сделать запрос POST для службы restfull, запущенной на сервере, и я хочу, чтобы BODY этого запроса был JSon String.

Я использую GSon для создания JSon для отправки на сервер. Код, который я использую, чтобы сделать запрос POST, следующий:

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

Код ответа 400 BAD REQUEST и из журнала сервера я могу прочитать информацию. где он говорит, что тело было неправильно отправлено:

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

Код для серверной части - это простая служба Restore 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;
 }

Что может быть неправильным с кодом клиента Android? Я исследовал Интернет и не нашел действительно полезной информации по этому вопросу.

[] S

4b9b3361

Ответ 1

Извините, только что оказалось, что ошибка была в службе Rest. Я изменил его, чтобы получить String вместо объекта Reader, и теперь он работает так, как ожидалось, код Rest на стороне сервера теперь:

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

И строка JSon правильно принимается на стороне сервера.

Итак, код Android над ним работает как ожидалось.

С уважением.