Ich habe so etwas wie folgendes:
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();
Es kommt immer wieder mit einem 500 zurück. Der Dienstanbieter sagt, ich muss JSON senden. Wie geht das mit Apache HttpClient 3.1+?
NameValuePair
fügen nur einen Anforderungsparameter hinzu, Sie senden keinen JSON in Ihrem Code. Welche JSON-Struktur erwartet der Dienst, welche Daten sollen gesendet werden? Sie suchenpostMethod.setRequestEntity()
mit einemStringRequestEntity
, der Ihren JSON enthält.Antworten:
Apache HttpClient weiß nichts über JSON, daher müssen Sie Ihren JSON separat erstellen. Zu diesem Zweck empfehle ich, die einfache JSON-Java- Bibliothek von json.org zu besuchen . (Wenn "JSON-java" nicht zu Ihnen passt, bietet json.org eine große Liste von Bibliotheken in verschiedenen Sprachen.)
Sobald Sie Ihren JSON generiert haben, können Sie ihn mit dem folgenden Code POSTEN
Bearbeiten
Hinweis - Die in der Frage angeforderte Antwort gilt für Apache HttpClient 3.1. Um jedoch jedem zu helfen, der nach einer Implementierung für den neuesten Apache-Client sucht:
quelle
parameter
hinzugefügt werden kannPOSTMethod
und gleichzeitig ein a gesetzt werdenRequestEntity
kann? Ich weiß, es klingt unlogisch, aber nur neugierig.StringRequestEntity
wurde ersetzt durchStringEntity
.Für Apache HttpClient 4.5 oder eine neuere Version:
Hinweis:
1 Damit der Code kompiliert werden kann, sollten sowohl
httpclient
Paket als auchhttpcore
Paket importiert werden.2 Try-Catch-Block wurde weggelassen.
Referenz : Appache offizielle Anleitung
quelle
Wie in der hervorragenden Antwort von janoside erwähnt , müssen Sie den JSON-String erstellen und als festlegen
StringEntity
.Zum Erstellen der JSON-Zeichenfolge können Sie eine beliebige Bibliothek oder Methode verwenden, mit der Sie vertraut sind. Die Jackson-Bibliothek ist ein einfaches Beispiel:
quelle