简体   繁体   中英

POST from android to WCF Service (OData)

Edit:

After doing some more experimentation, I discovered that the request will only work if all of the values are quoted in the JSON string. That is to say that this won't work

{"Text":"test","RatingValue":0.0,"LocationID":5}

and this will

{"Text":"test","RatingValue":"0.0","LocationID":"5"}

What I don't understand is why. The first string seems to be a valid JSON string. Is this a quirk with WCF?

Original Post

I am trying to post a new item to a collection from android. I keep getting a response code of 400: Bad Request. I don't understand what I'm doing wrong and I was hoping someone might be able to help me. Here is the java code.

HttpURLConnection conn = (HttpURLConnection) uri.toURL().openConnection();
conn.setRequestProperty("Content-Type", "application/json; charset=utf-8");
conn.setRequestProperty("Accept", "application/json");
conn.setRequestProperty("User-Agent", userAgent);
conn.setChunkedStreamingMode(0);
conn.setDoInput(true);
conn.setDoOutput(true);

conn.setRequestMethod("POST");
conn.connect();

DataOutputStream out = new DataOutputStream(conn.getOutputStream());
out.write(data.getBytes());
out.flush();

int code = conn.getResponseCode();
String message = conn.getResponseMessage();

conn.disconnect();

The data is a JSON string that looks like the following:

{"Text":"test","RatingValue":3.0,"ReviewID":0,"LocationID":5}

In this case the ReviewID is the primary key.

The URL for the request points to the collection of Ratings. If i paste the same location into my browser, it successfully queries the collection. It looks something like this:

http://localhost/DataService.svc/Ratings

try this :

 HttpClient hc = new DefaultHttpClient();
 HttpPost hp = new HttpPost("http://localhost/DataService.svc/Ratings");
 HttpResponse hr;
 JSONObject jo1 = new JSONObject();
 joobject.put("Text", "test");
 joobject.put("RatingValue", "3.0");
 joobject.put("ReviewID", ".0");
 joobject.put("LocationID", ".5");
 StringEntity se = new StringEntity(joobject.toString(),HTTP.UTF_8);
 se.setContentType("application/json");
 hp.setEntity(se);
 hr = hc.execute(hp);

maybe helpful

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM