POST HTTP usando JSON en Java

Resuelto asdf007 asked hace 13 años • 0 respuestas

Me gustaría hacer una POST HTTP simple usando JSON en Java.

Digamos que la URL eswww.site.com

y toma el valor {"name":"myname","age":"20"}etiquetado como 'details'por ejemplo.

¿Cómo haría para crear la sintaxis para POST?

Parece que tampoco puedo encontrar un método POST en los Javadocs JSON.

asdf007 avatar Aug 25 '11 03:08 asdf007
Aceptado

Aquí está lo que tú necesitas hacer:

  1. Obtenga Apache HttpClient, esto le permitirá realizar la solicitud requerida
  2. Crea una HttpPostsolicitud con él y agrega el encabezado.application/x-www-form-urlencoded
  3. Crea un archivo StringEntityal que le pasarás JSON.
  4. ejecutar la llamada

El código se parece aproximadamente a este (aún necesitarás depurarlo y hacerlo funcionar):

// @Deprecated HttpClient httpClient = new DefaultHttpClient();
HttpClient httpClient = HttpClientBuilder.create().build();
try {
    HttpPost request = new HttpPost("http://yoururl");
    StringEntity params = new StringEntity("details={\"name\":\"xyz\",\"age\":\"20\"} ");
    request.addHeader("content-type", "application/x-www-form-urlencoded");
    request.setEntity(params);
    HttpResponse response = httpClient.execute(request);
} catch (Exception ex) {
} finally {
    // @Deprecated httpClient.getConnectionManager().shutdown(); 
}
momo avatar Aug 24 '2011 20:08 momo

Puede utilizar la biblioteca Gson para convertir sus clases de Java en objetos JSON.

Cree una clase pojo para las variables que desea enviar según el ejemplo anterior

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

se convierte

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

una vez que configure las variables en la clase pojo1, puede enviarlas usando el siguiente código

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

y estas son las importaciones

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;
import org.apache.http.impl.client.HttpClientBuilder;

y para GSON

import com.google.gson.Gson;
Prakash avatar Jan 17 '2014 04:01 Prakash

La respuesta de @momo para Apache HttpClient, versión 4.3.1 o posterior. Estoy usando JSON-Javapara construir mi objeto 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();
}
Leonel Sanches da Silva avatar Nov 11 '2013 18:11 Leonel Sanches da Silva