222 votes

HTTP POST utilisant JSON en Java

Je voudrais faire un simple HTTP POST utilisant JSON en Java.

Disons que l'URL est www.site.com

et il prend la valeur {"name": "myname", "age": "20"} appelée "details" par exemple.

Comment pourrais-je créer la syntaxe pour le POST?

Je n'arrive pas non plus à trouver une méthode POST dans les Javadocs JSON.

189voto

momo Points 7728

Voici ce que tu dois faire:

  1. Obtenez le Apache HttpClient, cela vous permettrait de faire la demande requise
  2. Créez une demande HttpPost avec elle et ajoutez l'en-tête "application / x-www-form-urlencoded"
  3. Créez une StringEntity que vous lui passerez en JSON
  4. Exécuter l'appel

Le code ressemble à peu près (vous aurez toujours besoin de le déboguer et de le faire fonctionner)

 

    HttpClient httpClient = new DefaultHttpClient();

    try {
        HttpPost request = new HttpPost("http://yoururl");
        StringEntity params =new StringEntity("details={\"name\":\"myname\",\"age\":\"20\"} ");
        request.addHeader("content-type", "application/x-www-form-urlencoded");
        request.setEntity(params);
        HttpResponse response = httpClient.execute(request);

        // handle response here...
    }catch (Exception ex) {
        // handle exception here
    } finally {
        httpClient.getConnectionManager().shutdown();
    }

 

104voto

nag prakash Points 145

Vous pouvez utiliser la bibliothèque Gson pour convertir vos classes java en objets JSON.

Créez une classe pojo pour les variables à envoyer, comme indiqué ci-dessus Exemple {"name": "myname", "age": "20"}

 class pojo1
{
String name;
String age;
//generate setter and getters
}
 

une fois que vous définissez les variables dans la classe pojo1, vous pouvez l’envoyer en utilisant le code suivant

 String postUrl="www.site.com";// put in your url
Gson gson= new Gson();
HttpPost post = new HttpPost(postUrl);
StringEntity  postingString =new StringEntity(gson.toJson(pojo1));//convert your pojo to   json
post.setEntity(postingString);
post.setHeader("Content-type", "application/json");
HttpResponse  response = httpClient.execute(post);
 

et ce sont les importations

 import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
 

et pour GSON

 import com.google.gson.Gson;
 

63voto

La réponse de @ momo pour Apache HttpClient, version 4.3.1 ou ultérieure. J'utilise JSON-Java pour construire mon objet JSON:

 JSONObject json = new JSONObject();
json.put("someKey", "someValue");    

CloseableHttpClient httpClient = HttpClientBuilder.create().build();

try {
    HttpPost request = new HttpPost("http://yoururl");
    StringEntity params = new StringEntity(json.toString());
    request.addHeader("content-type", "application/json");
    request.setEntity(params);
    httpClient.execute(request);
// handle response here...
} catch (Exception ex) {
    // handle exception here
} finally {
    httpClient.close();
}
 

19voto

Alex Churchill Points 2317

Il est probablement plus facile à utiliser HttpURLConnection.

http://www.xyzws.com/Javafaq/how-to-use-httpurlconnection-post-data-to-web-server/139

Vous allez utiliser JSONObject ou que ce soit pour construire votre JSON, mais pas pour gérer le réseau, vous avez besoin de sérialiser et de le passer à un HttpURLConnection à la POSTE.

15voto

Sonu Dhakar Points 1

Essayez ce code:

 HttpClient httpClient = new DefaultHttpClient();

try {
    HttpPost request = new HttpPost("http://yoururl");
    StringEntity params =new StringEntity("details={\"name\":\"myname\",\"age\":\"20\"} ");
    request.addHeader("content-type", "application/json");
    request.addHeader("Accept","application/json");
    request.setEntity(params);
    HttpResponse response = httpClient.execute(request);

    // handle response here...
}catch (Exception ex) {
    // handle exception here
} finally {
    httpClient.getConnectionManager().shutdown();
}
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X