Как выполнить запрос POST JSON с использованием Apache HttpClient?

У меня есть что-то вроде следующего:

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();

Он продолжает возвращаться с 500. Поставщик услуг говорит, что мне нужно отправить JSON. Как это делается с Apache HttpClient 3.1 +?

Ответ 1

Apache HttpClient ничего не знает о JSON, поэтому вам нужно будет сконструировать JSON отдельно. Для этого я рекомендую проверить простую JSON-java библиотеку json.org. (Если "JSON-java" вам не подходит, у json.org есть большой список библиотек, доступных на разных языках.)

Как только вы создали свой JSON, вы можете использовать что-то вроде кода ниже для POST it

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);

Edit

Примечание. Вышеупомянутый ответ, заданный в вопросе, относится к Apache HttpClient 3.1. Однако, чтобы помочь любому, кто ищет реализацию против последнего клиента 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);