【问题标题】:How to send a JSONObject to a REST service?如何将 JSONObject 发送到 REST 服务?
【发布时间】:2010-06-11 12:12:13
【问题描述】:

从 REST 服务器检索数据效果很好,但如果我想发布一个对象,它就不起作用了:

public static void postJSONObject(int store_type, FavoriteItem favorite, String token, String objectName) {
        String url = "";

        switch(store_type) {
            case STORE_PROJECT:
                url = URL_STORE_PROJECT_PART1 + token + URL_STORE_PROJECT_PART2; 
                //data = favorite.getAsJSONObject();
            break;
        }

        HttpClient httpClient = new DefaultHttpClient();
        HttpPost postMethod = new HttpPost(url);

        try {   
            HttpEntity entity = new StringEntity("{\"ID\":0,\"Name\":\"Mein Projekt10\"}");

            postMethod.setEntity(entity);

            HttpResponse response = httpClient.execute(postMethod);
            Log.i("JSONStore", "Post request, to URL: " + url);
            System.out.println("Status code: " + response.getStatusLine().getStatusCode());

        } catch (ClientProtocolException e) {

我总是收到 400 错误代码。有谁知道怎么回事?

我有可用的 C# 代码,但无法转换:

 System.Net.WebRequest wr = System.Net.HttpWebRequest.Create("http://localhost:51273/WSUser.svc/pak3omxtEuLrzHSUSbQP/project");
            wr.Method = "POST";
            string data = "{\"ID\":1,\"Name\":\"Mein Projekt\"}";

            byte [] d = UTF8Encoding.UTF8.GetBytes(data);
            wr.ContentLength = d.Length;
            wr.ContentType = "application/json";

             wr.GetRequestStream().Write(d, 0, d.Length);
            System.Net.WebResponse wresp = wr.GetResponse();
            System.IO.StreamReader sr = new System.IO.StreamReader(wresp.GetResponseStream());
            string line = sr.ReadToEnd();

【问题讨论】:

  • 我怀疑只有编写 Web 服务的人才能回答。
  • status为400时请求体中是否有内容?也许他们会回复一条错误消息,告诉您他们为什么给您 400。
  • 感谢您的提示。生病检查它。我还添加了一些我知道它可以工作的代码,但不幸的是它的 C#
  • [android defaulthttpclient post to service wcf svc][1] [1]: stackoverflow.com/questions/11893180/…
  • [android-defaulthttpclient-post-to-service-wcf-svc][1] [1]: stackoverflow.com/questions/11893180/…

标签: java android json rest


【解决方案1】:

尝试设置内容类型标题:

postMethod.addRequestHeader("Content-Type", "application/json");

顺便说一句,我强烈推荐Jersey。它有一个 REST client library 这使得这些事情变得更容易和更易读

【讨论】:

    【解决方案2】:

    您的 C# 与您的 Java 不同,不仅在语法上。

    您的 C# 通过 HTTP POST 向服务器发送一个 application/json 实体。至于这是否适合使用 POST(相对于 PUT),我将由 HTTP 纯粹主义者来决定。

    您的 Java 创建了一个表单,其字段为 jsonString(其值为 JSON),并将 application/x-www-form-urlencoded 实体发送到包含该表单的服务器。

    【讨论】:

    • 谢谢。你的权利。我更新了我的 java 代码。但我找不到如何创建应用程序/json 实体的参考
    【解决方案3】:

    我会直接访问服务器 err_log 或等效的错误日志。服务器知道它为什么拒绝您的请求。如果您没有访问权限,请设置您自己的测试服务器并在那里复制问题,以便您可以查看日志 =)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-10-18
      • 1970-01-01
      • 2013-09-07
      • 1970-01-01
      • 1970-01-01
      • 2013-10-31
      • 2015-11-18
      • 2021-06-22
      相关资源
      最近更新 更多