2010-06-11 3 views
3

Извлечение данных из REST сервера работает хорошо, но если я хочу, чтобы разместить объект не работает:Как отправить JSONObject в службу 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

Я подозреваю, что единственные люди, которые могут ответить, это люди, которые написали веб-службу. – CommonsWare

+0

Есть ли что-нибудь в теле запроса, когда статус 400? Возможно, они отвечают сообщением об ошибке, объяснив вам, почему они дали вам 400. –

+0

спасибо за ваши подсказки. Я проверю его. я также добавил еще некоторый код, я знал, что его работу, но, к сожалению, его C# – 2010-06-11 12:56:49

ответ

5

Попробуйте установить тип содержимого заголовка:

postMethod.addRequestHeader ("Content-Type", "приложения/JSON");

Btw, я настоятельно рекомендую Jersey. Он имеет REST client library, который делает такие вещи намного проще и читабельнее

+0

Это работает! Большое спасибо! – RoflcoptrException

+0

Добро пожаловать. Рад, что это сработало! –

-1

Я бы право на err_log сервера или equivelant журнал ошибок. Сервер знает, почему он отклонил ваш запрос. Если у вас нет доступа, настройте свой собственный тестовый сервер и дублируйте проблему там, чтобы вы могли просмотреть журналы.)

2

Ваш C# отличается от вашей Java, а не только синтаксисом.

Ваш C# отправляет объект application/json на сервер через HTTP POST. Я оставлю это до HTTP-пуристов относительно того, подходит ли это использование POST (против PUT).

Ваша Java создает форму с полем jsonString (значение которого является JSON) и отправляет объект application/x-www-form-urlencoded на сервер, содержащий эту форму.

+0

Спасибо. Твое право. Я обновил свой Java-код. Но я не могу найти ссылку, как создать приложение/json entity – RoflcoptrException

Смежные вопросы