HTTP POST utilisant JSON en Java

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

Disons que l’URL est www.site.com

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

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.

Voici ce que tu dois faire:

  1. Obtenir le HttpClient Apache, cela vous permettrait de faire la demande requirejse
  2. Créez une requête HttpPost avec elle et ajoutez l’en-tête “application / x-www-form-urlencoded”
  3. Créez un SsortingngEntity que vous lui passerez
  4. Exécuter l’appel

Le code ressemble grosso modo (vous devrez toujours le déboguer et le faire fonctionner)

 //Deprecated //HttpClient httpClient = new DefaultHttpClient(); HttpClient httpClient = HttpClientBuilder.create().build(); //Use this instead try { HttpPost request = new HttpPost("http://yoururl"); SsortingngEntity params =new SsortingngEntity("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 { //Deprecated //httpClient.getConnectionManager().shutdown(); } 

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

Créez une classe pojo pour les variables que vous souhaitez envoyer selon l’exemple ci-dessus

 {"name":"myname","age":"20"} 

devient

 class pojo1 { Ssortingng name; Ssortingng 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

 Ssortingng postUrl = "www.site.com";// put in your url Gson gson = new Gson(); HttpClient httpClient = HttpClientBuilder.create().build(); HttpPost post = new HttpPost(postUrl); SsortingngEntity postingSsortingng = new SsortingngEntity(gson.toJson(pojo1));//gson.tojson() converts your pojo to json post.setEntity(postingSsortingng); 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.SsortingngEntity; import org.apache.http.impl.client.HttpClientBuilder; 

et pour GSON

 import com.google.gson.Gson; 

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

 JSONObject json = new JSONObject(); json.put("someKey", "someValue"); CloseableHttpClient httpClient = HttpClientBuilder.create().build(); try { HttpPost request = new HttpPost("http://yoururl"); SsortingngEntity params = new SsortingngEntity(json.toSsortingng()); request.addHeader("content-type", "application/json"); request.setEntity(params); httpClient.execute(request); // handle response here... } catch (Exception ex) { // handle exception here } finally { httpClient.close(); } 

Il est probablement plus facile d’utiliser HttpURLConnection .

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

Vous utiliserez JSONObject ou autre pour construire votre JSON, mais pas pour gérer le réseau; vous devez le sérialiser puis le transmettre à un HttpURLConnection à POST.

 protected void sendJson(final Ssortingng play, final Ssortingng prop) { Thread t = new Thread() { public void run() { Looper.prepare(); //For Preparing Message Pool for the childThread HttpClient client = new DefaultHttpClient(); HttpConnectionParams.setConnectionTimeout(client.getParams(), 1000); //Timeout Limit HttpResponse response; JSONObject json = new JSONObject(); try { HttpPost post = new HttpPost("http://192.168.0.44:80"); json.put("play", play); json.put("Properties", prop); SsortingngEntity se = new SsortingngEntity(json.toSsortingng()); se.setContentType(new BasicHeader(HTTP.CONTENT_TYPE, "application/json")); post.setEntity(se); response = client.execute(post); /*Checking response */ if (response != null) { InputStream in = response.getEntity().getContent(); //Get the data in the entity } } catch (Exception e) { e.printStackTrace(); showMessage("Error", "Cannot Estabilish Connection"); } Looper.loop(); //Loop in the message queue } }; t.start(); } 

Essayez ce code:

 HttpClient httpClient = new DefaultHttpClient(); try { HttpPost request = new HttpPost("http://yoururl"); SsortingngEntity params =new SsortingngEntity("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(); } 

J’ai trouvé cette question à la recherche d’une solution sur la façon d’envoyer une demande de post de client Java à des points de terminaison Google. Réponses ci-dessus, très probablement correctes, mais ne fonctionnent pas dans le cas des points de terminaison Google.

Solution pour les points de terminaison Google.

  1. Le corps de la requête doit contenir uniquement une chaîne JSON, pas une paire nom = valeur.
  2. L’en-tête de type de contenu doit être défini sur “application / json”.

     post("http://localhost:8888/_ah/api/langapi/v1/createLanguage", "{\"language\":\"russian\", \"description\":\"dsfsdfsdfsdfsd\"}"); public static void post(Ssortingng url, Ssortingng param ) throws Exception{ Ssortingng charset = "UTF-8"; URLConnection connection = new URL(url).openConnection(); connection.setDoOutput(true); // Triggers POST. connection.setRequestProperty("Accept-Charset", charset); connection.setRequestProperty("Content-Type", "application/json;charset=" + charset); try (OutputStream output = connection.getOutputStream()) { output.write(param.getBytes(charset)); } InputStream response = connection.getInputStream(); } 

    Cela peut aussi être fait avec HttpClient.

Je recommande http-request basé sur Apache http api.

 HttpRequest httpRequest = HttpRequestBuilder.createPost(yourUri, Ssortingng.class) .responseDeserializer(ResponseDeserializer.ignorableDeserializer()).build(); public void send(){ ResponseHandler responseHandler = httpRequest.execute("details", yourJsonData); int statusCode = responseHandler.getStatusCode(); Ssortingng responseContent = responseHandler.orElse(null); // returns Content from response. If content isn't present returns null. } 

Si vous voulez envoyer JSON tant que corps de requête, vous pouvez:

  ResponseHandler responseHandler = httpRequest.executeWithBody(yourJsonData); 

Je recommande fortement de lire la documentation avant de l’utiliser.