私は次のようなものを持っています:
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();
サービスプロバイダーは、JSONを送信する必要があると言っています。 Apache HttpClient 3.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);
編集
注-質問で求められた上記の答えは、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);
Apache HttpClient 4.5以降のバージョンの場合:
CloseableHttpClient httpclient = HttpClients.createDefault();
HttpPost httpPost = new HttpPost("http://targethost/login");
String JSON_STRING="";
HttpEntity stringEntity = new StringEntity(JSON_STRING,ContentType.APPLICATION_JSON);
httpPost.setEntity(stringEntity);
CloseableHttpResponse response2 = httpclient.execute(httpPost);
注:
1コードをコンパイルするには、httpclient
パッケージとhttpcore
パッケージの両方をインポートする必要があります。
2 try-catchブロックは省略されています。
リファレンス: appache公式ガイド
commons HttpClientプロジェクトは廃止され、現在は開発されていません。 HttpClientおよびHttpCoreモジュールのApache HttpComponentsプロジェクトに置き換えられました。
janosideによる優れた回答で述べたように、JSON文字列を作成し、StringEntity
として設定する必要があります。
JSON文字列を構築するには、使い慣れたライブラリまたはメソッドを使用できます。ジャクソンライブラリは簡単な例です。
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));