example - httpclient post json java
¿Cómo POSTAR la solicitud JSON utilizando Apache HttpClient? (2)
Apache HttpClient no sabe nada sobre JSON, por lo que deberá construir su JSON por separado. Para hacerlo, recomiendo consultar la biblioteca JSON-java simple de json.org . (Si "JSON-java" no le conviene, json.org tiene una gran lista de bibliotecas disponibles en diferentes idiomas).
Una vez que haya generado su JSON, puede usar algo como el siguiente código para PUBLICARLO
StringRequestEntity requestEntity = new StringRequestEntity(
JSON_STRING,
"application/json",
"UTF-8");
PostMethod postMethod = new PostMethod("http://example.com/action");
postMethod.setRequestEntity(requestEntity);
int statusCode = httpClient.executeMethod(postMethod);
Editar
Nota: la respuesta anterior, como se solicita en la pregunta, se aplica a Apache HttpClient 3.1. Sin embargo, para ayudar a cualquiera que busque una implementación contra el último cliente Apache:
StringEntity requestEntity = new StringEntity(
JSON_STRING,
ContentType.APPLICATION_JSON);
HttpPost postMethod = new HttpPost("http://example.com/action");
postMethod.setEntity(requestEntity);
HttpResponse rawResponse = httpclient.execute(postMethod);
Tengo algo como lo siguiente:
final String url = "http://example.com";
final HttpClient httpClient = new HttpClient();
final PostMethod postMethod = new PostMethod(url);
postMethod.addRequestHeader("Content-Type", "application/json");
postMethod.addParameters(new NameValuePair[]{
new NameValuePair("name", "value)
});
httpClient.executeMethod(httpMethod);
postMethod.getResponseBodyAsStream();
postMethod.releaseConnection();
Vuelve con 500. El proveedor de servicios dice que necesito enviar JSON. ¿Cómo se hace eso con Apache HttpClient 3.1+?
Como se menciona en la excelente respuesta de janoside , necesita construir la cadena JSON y establecerla como StringEntity
.
Para construir la cadena JSON, puede usar cualquier biblioteca o método con el que se sienta cómodo. La biblioteca de Jackson es un ejemplo fácil:
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ObjectNode;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.StringEntity;
ObjectMapper mapper = new ObjectMapper();
ObjectNode node = mapper.createObjectNode();
node.put("name", "value"); // repeat as needed
String JSON_STRING = node.toString();
postMethod.setEntity(new StringEntity(JSON_STRING, ContentType.APPLICATION_JSON));