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:
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.
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.