2010-10-27 84 views
3

我想從我的Android客戶端發送一個json字符串到我的.net Rest服務... 任何人都可以幫助我解決這個問題嗎?如何將JSON字符串發送到Java的.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對象作爲字符串?這段代碼是否正確?

+0

您是否想要爲.net Web服務發佈代碼(服務屬性,它定義了post/get和路由url)?不是整個實現,而是它定義URL路由和獲取/發佈的地方。 – Aliostad 2010-10-27 10:55:33

+0

@aliostad:這是我的Android客戶端code.in myURL我指定了我的URL(http://10.242.48.54/restinsert/Service1.svc/CreateCustomer/Data)。該服務在.net中實現,只接受字符串作爲輸入。 – Ads 2010-10-27 11:14:07

回答

7

溶液是

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對象字符串,所以英寸淨請求應該有對象參數...

+0

你讓我的一天夥伴......... – 2011-02-18 06:03:47

+0

@ N-JOY:很高興聽到.. – Ads 2011-03-09 12:56:58

+0

@Ads:你也是我的一天。謝謝:) – Nitish 2014-07-04 11:16:16

0

看起來有效除了下面的頭:

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

內容編碼這裏描述:http://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.5

+0

如果我指定application/json以外,它不接受任何值! – Ads 2010-10-28 05:31:26

+0

您確定您已經嘗試過僅指定內容類型標題嗎? – jgauffin 2010-10-28 06:07:37

+0

是的!在後我指定只有內容類型標題,有什麼我必須添加在那其他然後呢?如果是這樣,請讓我知道 – Ads 2010-10-28 08:46:20

2

對於任何人有同樣的問題,這裏有一個快速修復: - Web服務正在期待一個包含String類型屬性的對象。 爲了使這項工作,你必須有一個「預期」對象的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(); 
相關問題