Eu tenho algo como o seguinte:
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();
Ele continua voltando com um 500. O provedor de serviços diz que preciso enviar JSON. Como isso é feito com o Apache HttpClient 3.1+?
NameValuePair
apenas adiciona um parâmetro de solicitação, você não está enviando nenhum JSON em seu código. Qual estrutura JSON o serviço espera receber, quais são os seus dados para enviar? Você está procurandopostMethod.setRequestEntity()
com umStringRequestEntity
que contém seu JSON.Respostas:
O Apache HttpClient não sabe nada sobre JSON, portanto, você precisará construir seu JSON separadamente. Para fazer isso, recomendo verificar a biblioteca JSON-java simples de json.org . (Se "JSON-java" não combina com você, json.org tem uma grande lista de bibliotecas disponíveis em diferentes idiomas.)
Depois de gerar seu JSON, você pode usar algo como o código abaixo para fazer um POST
Editar
Observação - A resposta acima, conforme solicitado na pergunta, se aplica ao Apache HttpClient 3.1. No entanto, para ajudar qualquer um que esteja procurando uma implementação no cliente Apache mais recente:
fonte
parameter
pode ser adicionadoPOSTMethod
e ao mesmo tempo definir umRequestEntity
a ele? Eu sei que parece ilógico, mas apenas curioso.StringRequestEntity
foi substituído porStringEntity
.Para Apache HttpClient 4.5 ou versão mais recente:
Nota:
1 para fazer a compilação do código, o
httpclient
pacote e ohttpcore
pacote devem ser importados.2 blocos try-catch foram omitidos.
Referência : guia oficial do appache
fonte
Conforme mencionado na excelente resposta de janoside , você precisa construir a string JSON e defini-la como um
StringEntity
.Para construir a string JSON, você pode usar qualquer biblioteca ou método com o qual se sinta confortável. A biblioteca Jackson é um exemplo fácil:
fonte