Comment publier JSON demande à l'aide d'Apache HttpClient?
J'ai quelque chose comme ce qui suit:
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();
Il ne cesse de revenir en arrière avec un 500. Le fournisseur de service dit que j'ai besoin d'envoyer JSON. Comment est-ce fait avec Apache HttpClient 3.1+?
- Votre
NameValuePair
ajoute juste un paramètre de la requête, vous n'êtes pas d'envoyer tout JSON dans votre code. Quelle structure JSON le service s'attendre à recevoir, ce que vos données à envoyer? Vous êtes à la recherche pourpostMethod.setRequestEntity()
avec unStringRequestEntity
qui contient votre JSON.
Vous devez vous connecter pour publier un commentaire.
Apache HttpClient ne sais rien à propos de JSON, de sorte que vous aurez besoin pour construire votre JSON séparément. Pour ce faire, je vous recommandons de vérifier la simple JSON-java bibliothèque de json.org. (Si "JSON-java" ne vous convient pas, json.org a une grande liste de bibliothèques disponibles dans différentes langues.)
Une fois que vous avez généré votre JSON, vous pouvez utiliser quelque chose comme le code ci-dessous pour POSTER
Modifier
Remarque - La réponse ci-dessus, comme demandé dans la question, s'applique à Apache HttpClient 3.1. Toutefois, afin d'aider toute personne à la recherche pour une mise en œuvre à l'encontre de la dernière version de Apache client:
parameter
peut être ajouté àPOSTMethod
et en même temps, établir unRequestEntity
- t-il? Je sais que cela semble illogique, mais juste curieux.StringRequestEntity
a été remplacé parStringEntity
.Pour Apache HttpClient 4.5 ou version plus récente:
Remarque:
1 afin de rendre le code à compiler, à la fois
httpclient
paquet ethttpcore
package doit être importé.2 bloc try-catch a été omises.
Référence:
appache guide officiel
Comme mentionné dans la réponse excellent par janoside, vous avez besoin de construire la chaîne JSON et le définir comme un
StringEntity
.De construire la chaîne JSON, vous pouvez utiliser n'importe quelle bibliothèque ou la méthode que vous êtes à l'aise avec. Jackson bibliothèque est un exemple facile: