2010-10-27 127 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(); 
相关问题