2016-11-17 1 views
3

J'essaie d'utiliser une API REST qui ne prend en charge que le transfert de données JSON via les attributs form-data ou www-form-urlencoded. Donc, ma question est, comment puis-je utiliser un HttpUrlConnection pour attacher plusieurs éléments de données de formulaire? Lorsque j'utilise l'API via le navigateur la demande ressemble à ceci dans Chrome:Java - Comment envoyer des données de formulaire ou des données urlencodées www sur une HttpUrlConnection

Formulaire de données
ajoute:
mises à jour: [{ "attributs": { "OBJECTID": 2241 , "OTHER_FIELD": "500"}}]
supprime:
gdbVersion:
rouleau backOnFailure:
f: pjson

Mais je ne peux pas comprendre comment reproduire ce en Java.

C'est ce que je l'ai essayé jusqu'à présent:

HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection(); 
    urlConnection.setUseCaches(false); 
    urlConnection.setDoOutput(true); 
    urlConnection.setRequestMethod("POST"); 
    urlConnection.addRequestProperty("f", "json"); 
    urlConnection.addRequestProperty("adds", null); 
    urlConnection.addRequestProperty("updates", "[{\"attributes\":{\"OBJECTID\":2241,\"OTHER_FIELD\":\"500\"}}]"); 
    urlConnection.addRequestProperty("deletes", null); 
    urlConnection.addRequestProperty("rollbackOnFailure", "true"); 
    urlConnection.addRequestProperty("gdbVersion", null); 

Mais il ne se fixe pas les données comme il se doit ...

Pour les personnes intéressées, je suis en train de se connecter à un ArcGIS API fonction de service afin que je puisse ajouter, mettre à jour ou supprimer des fonctionnalités, mais ici, je me sers ApplyEdits

Répondre

4

alors je me suis comment résoudre cela et est la solution ici:

 HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection(); 
     urlConnection.setDoOutput(true); 
     urlConnection.setRequestMethod("POST"); 

Définissez d'abord la demande d'une requête POST et qu'il y aura une sortie

 StringBuilder encodedUrl = new StringBuilder("adds=" + URLEncoder.encode("[{\"attributes\":{\"OBJECTID\":2241,\"MAXIMOID_PRE\":\"HYD\"}}]", "UTF-8")); 
     encodedUrl.append("&updates=" + URLEncoder.encode("", "UTF-8")); 
     encodedUrl.append("&deletes=" + URLEncoder.encode("", "UTF-8")); 
     encodedUrl.append("&f=" + URLEncoder.encode("json", "UTF-8")); 
     encodedUrl.append("&rollbackOnFailure=" + URLEncoder.encode("true", "UTF-8")); 
     encodedUrl.append("&gdbVersion=" + URLEncoder.encode("", "UTF-8")); 

Voici comment chacune des valeurs de forme données se prépare. Chaque valeur de clé est juste une chaîne java et ensuite la valeur est codée en utilisant le URLEncoder.encode. En utilisant cette chaîne qui a tous les éléments de forme de données nous alors écrire à la outputstream:

 final BufferedWriter bfw = new BufferedWriter(new OutputStreamWriter(urlConnection.getOutputStream())); 
     bfw.write(encodedUrl); 
     bfw.flush(); 
     bfw.close(); 

Puis, après que la réponse peut être reçue et analysés en dehors.