当前位置: 首页 > 面试题库 >

如何在POST请求中将JSon作为BODY从Android应用程序发送到服务器?

佘修为
2023-03-14
问题内容

我正在开发我的第一个Android应用程序。我正在尝试做的是对REST服务的POST请求,我希望此请求的主体为JSON字符串。

我正在使用Google的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/maia.marcos@gmail.com
org.jboss.resteasy.spi.BadRequestException: Could not find message body reader for type: class java.io.Reader of content type: application/json

服务器端的代码是一个简单的Seam Rest Service:

    @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客户端代码可能有什么问题?我已经研究了网络,但没有发现有关此错误的任何真正有用的信息。

[]秒


问题答案:

抱歉,刚刚发现该错误是在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 received from device ==>> " + json);
        }   
        return "OK - processed email ==>> " + email;
}

并且JSON字符串已在服务器端正确接收。

因此,上面的de Android代码按预期工作。



 类似资料:
  • 问题内容: 关于如何将对象从我的android应用程序发送到数据库,我 有点茫然 由于我是新手,所以我不太确定哪里出了问题,我从中提取了数据,我不知道如何将对象发布到我们的服务器。 任何建议将不胜感激 问题答案: 您需要使用一个类与服务器进行通信。像这样: 这是您的方法。 这是您的活动课程中的新课程。 这行:将其作为HTTP POST请求,应在您的服务器上作为POST请求处理。 然后,在服务器上,

  • 问题内容: 我正在使用下面的代码发送http POST请求,该请求将对象发送到WCF服务。可以,但是如果我的WCF服务还需要其他参数怎么办?如何从Android客户端发送它们? 这是我到目前为止编写的代码: 问题答案: 使用POST发布参数: 你错过的部分在以下内容中,即如下。 其余的事情你都可以做到。

  • 问题内容: 我正在尝试使用Alamofire快速发布尸体的发布请求。 我的json主体看起来像: 我正在尝试使 NSDictionnary看起来像: 我使用Alamofire的请求如下所示: 该请求有一个错误,我相信问题出在字典列表上,因为如果我在没有列表的情况下发出请求,它就可以正常工作,所以有什么主意吗? 我已经尝试过建议的解决方案,但是我遇到了同样的问题: 问题答案: 你近了 参数字典格式看

  • 我想从php发送post请求到python并得到答案,我写了这个脚本发送post 我使用定制python服务器

  • 问题内容: 我试图弄清楚如何通过使用HTTPClient从Android发布JSON。我试图解决这一问题已有一段时间,我在网上找到了很多示例,但我无法使用其中的任何示例。我认为这是因为我总体上缺乏JSON /网络知识。我知道那里有很多示例,但是有人可以指出我的实际教程吗?我正在寻找包含代码的逐步过程,并解释为什么您执行每个步骤或该步骤执行的操作。不需要很复杂,简单就足够了。 再说一次,我知道那里有

  • 在我的应用程序中,我希望在崩溃时将日志发送到远程服务器。我添加了try-catch块,并在catch中向服务器发送日志。我想知道我应该抓住哪些例外。我需要日志以防每次崩溃,这样我就能修复它。捕捉所有异常是一种好的做法吗? 提前感谢。