从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();
答案 0 :(得分:5)
尝试设置内容类型标题:
不过,我强烈推荐Jersey。它有一个REST client library,使这些事情变得更容易和更具可读性postMethod.addRequestHeader(“Content-Type”,“application / json”);
答案 1 :(得分:2)
您的C#与Java不同,而不仅仅是语法。
您的C#通过HTTP POST向服务器发送application/json
实体。我会告诉HTTP纯粹主义者是否适当使用POST(与PUT相比)。
您的Java创建一个表单,其字段为jsonString
(其值为JSON),并将application/x-www-form-urlencoded
实体发送到包含该表单的服务器。
答案 2 :(得分:-1)
我会直接到服务器err_log或equivelant错误日志。服务器知道它拒绝您的请求的原因。如果您没有访问权限,请设置自己的测试服务器并在那里复制问题,以便查看日志=)