POST HTTP usando JSON en Java
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.
Aquí está lo que tú necesitas hacer:
- Obtenga Apache
HttpClient
, esto le permitirá realizar la solicitud requerida - Crea una
HttpPost
solicitud con él y agrega el encabezado.application/x-www-form-urlencoded
- Crea un archivo
StringEntity
al que le pasarás JSON. - 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();
}
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;
La respuesta de @momo para Apache HttpClient, versión 4.3.1 o posterior. Estoy usando JSON-Java
para 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();
}