【问题标题】:how to send a json string to a .NET REST service from java?如何从 java 将 json 字符串发送到 .NET REST 服务?
【发布时间】:2010-10-27 10:43:38
【问题描述】:

我正在尝试将 json 字符串从我的 android 客户端发送到我的 .net Rest 服务... 谁能帮我解决这个问题?

HttpClient client = new DefaultHttpClient();
HttpPost post = new HttpPost("http://myURL");

 JSONObject json = new JSONObject();
 json.put("name", "i am sample");
 StringEntity str = new StringEntity(json.toString());
 str.setContentType("application/json; charset=utf-8");
 str.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE,"application/json; charset=utf-8"));
 post.setEntity(str);
 HttpResponse response = client.execute(post);

响应是错误的请求。我是否将 json 对象作为字符串发送?这段代码正确吗?

【问题讨论】:

  • 您想发布 .net Web 服务的代码(定义 post/get 和路由 url 的服务属性)吗?不是整个实现,而是它定义 URL 路由和 get/post 的地方。
  • @alostad:这是我的 android 客户端代码。在 myURL 中,我指定了我的 URL(10.242.48.54/restinsert/Service1.svc/CreateCustomer/Data)。此服务在 .net 中实现,仅接受字符串作为其输入。

标签: .net android web-services


【解决方案1】:

解决办法是

HttpPost request = new HttpPost("http://10.242.48.54/restinsert/Service1.svc/save");
JSONStringer json = new JSONStringer()
.object() 
 .key("cname").value(name)
 .key("cmail").value(email)

.endObject();

StringEntity entity = new StringEntity(json.toString(), "UTF-8");
                     entity.setContentType("application/json;charset=UTF-8");//text/plain;charset=UTF-8
                     entity.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE,"application/json;charset=UTF-8"));
                     request.setEntity(entity); 
                     // Send request to WCF service 
                     DefaultHttpClient httpClient = new DefaultHttpClient();

                     HttpResponse response = httpClient.execute(request); 

这将发送json对象字符串,所以在.net中请求应该有对象参数...

【讨论】:

    【解决方案2】:

    对于遇到相同问题的任何人,这里有一个快速解决方法: - Web 服务需要一个包含字符串类型属性的对象。 为了完成这项工作,您必须拥有“预期”对象的 DataContract。

    例如,不要要求字符串,而是为您的数据创建一个类:

    [DataContract]
    public class MyJSonString
    {
     [DataMember]
        public String MyString {get;set;}
    }
    

    因此,在您的 WCF 方法声明中,您将拥有:

    public void GetMyJsonString(MyJSonString mystring){...}
    

    在你的 Java 方面,你有:

    JSONStringer json = new JSONStringer().object().key("MyString").value("Hello!").endObject();
    

    【讨论】:

      【解决方案3】:

      看起来有效,但以下标题除外:

      str.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE,"application/json; charset=utf-8"));
      

      这里描述了内容编码:http://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.5

      【讨论】:

      • 如果我指定的不是application/json,它不接受任何值!
      • 您确定您尝试过仅指定内容类型标头吗?
      • 是的!在帖子中我只指定了内容类型标题,除此之外还有什么我必须添加的吗?如果是这样,请告诉我
      • 尝试将内容类型放在post 变量上。我认为将规范放在entity 上会产生一个多部分的帖子。我在网上找到了一个例子:localtone.blogspot.com/2009/07/…
      猜你喜欢
      • 1970-01-01
      • 2012-05-21
      • 1970-01-01
      • 2011-09-16
      • 1970-01-01
      • 2016-06-12
      • 1970-01-01
      • 1970-01-01
      • 2015-10-20
      相关资源
      最近更新 更多