2010-06-11 8 views
3

données Extraction du serveur REST fonctionne bien, mais si je veux poster un objet, il ne fonctionne pas:Comment envoyer un objet JSONObject à un service 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) { 

Je reçois toujours un code d'erreur 400. Est-ce que quelqu'un sait ce qui ne va pas?

J'ai travaille code C#, mais je ne peux pas convertir:

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

Je suppose que les seules personnes qui peuvent répondre sont les personnes qui ont écrit le service Web. – CommonsWare

+0

Y a-t-il quelque chose dans le corps de la requête lorsque le statut est 400? Peut-être qu'ils répondent avec un message d'erreur vous indiquant pourquoi ils vous ont donné un 400. –

+0

merci pour vos conseils. je vais le vérifier. J'ai aussi ajouté un code plus je savais que son travail, mais malheureusement son C# –

Répondre

5

Essayez de régler l'en-tête de type de contenu:

postMethod.addRequestHeader ("Content-Type", "application/json");

Btw, je recommande fortement Jersey. Il a un REST client library qui rend ce genre de choses beaucoup plus facile et plus lisible

+0

Cela fonctionne! Merci beaucoup! – RoflcoptrException

+0

De rien. Content que ça a marché! –

-1

Je voudrais aller droit au serveur err_log ou journal des erreurs equivelant. Le serveur sait pourquoi il a rejeté votre demande. Si vous n'y avez pas accès, configurez votre propre serveur de test et dupliquez-le afin de pouvoir consulter les logs =)

2

Votre C# est différent de votre Java, et pas seulement de la syntaxe.

Votre C# envoie une entité application/json au serveur via HTTP POST. Je laisserai aux puristes HTTP le soin de savoir si c'est l'utilisation appropriée de POST (vs PUT).

Votre Java crée un formulaire avec un champ jsonString (dont la valeur est le JSON) et envoie une entité application/x-www-form-urlencoded au serveur contenant ce formulaire.

+0

Merci. Tu as raison. J'ai mis à jour mon code Java. Mais je ne peux pas trouver une référence comment créer une application/entité json – RoflcoptrException

Questions connexes