1. 概要
このチュートリアルでは、HttpURLConnectionを使用してJSONPOSTリクエストを作成する方法を示します。
2. HttpURLConnectionを使用したJSONPOSTリクエストの作成
2.1. URLオブジェクトを作成します
HTTPPOSTメソッドを介してJSONデータを受け入れるターゲットURI文字列を使用してURLオブジェクトを作成しましょう。
URL url = new URL ("https://reqres.in/api/users");
2.2. 接続を開く
上記のURLオブジェクトから、 openConnection メソッドを呼び出して、HttpURLConnectionオブジェクトを取得できます。
HttpURLConnection は抽象クラスであるため、直接インスタンス化することはできません。
HttpURLConnection con = (HttpURLConnection)url.openConnection();
2.3. リクエスト方法を設定する
POSTリクエストを送信するには、リクエストメソッドのプロパティをPOSTに設定する必要があります。
con.setRequestMethod("POST");
2.4. リクエストコンテンツタイプヘッダーパラメータを設定します
「content-type」リクエストヘッダーを「application/json」に設定して、リクエストコンテンツをJSON形式で送信します。 リクエスト本文をJSON形式で送信するには、このパラメーターを設定する必要があります。
そうしないと、サーバーはHTTPステータスコード「400-badrequest」を返します。
con.setRequestProperty("Content-Type", "application/json");
2.5. 応答フォーマットタイプの設定
「Accept」リクエストヘッダーを「application/json」に設定して、目的の形式で応答を読み取ります。
con.setRequestProperty("Accept", "application/json");
2.6. 接続がコンテンツの送信に使用されることを確認します
リクエストコンテンツを送信するには、URLConnectionオブジェクトのdoOutputプロパティをtrueに有効にします。
そうしないと、接続出力ストリームにコンテンツを書き込むことができません。
con.setDoOutput(true);
2.7. リクエスト本文を作成する
カスタムJSON文字列を作成した後:
String jsonInputString = "{"name": "Upendra", "job": "Programmer"}";
私たちはそれを書く必要があるでしょう:
try(OutputStream os = con.getOutputStream()) {
byte[] input = jsonInputString.getBytes("utf-8");
os.write(input, 0, input.length);
}
2.8. 入力ストリームからの応答を読み取る
入力ストリームを取得して、応答コンテンツを読み取ります。 try-with-resourcesを使用して、応答ストリームを自動的に閉じることを忘れないでください。
応答の内容全体を読み、最終的な応答文字列を出力します。
try(BufferedReader br = new BufferedReader(
new InputStreamReader(con.getInputStream(), "utf-8"))) {
StringBuilder response = new StringBuilder();
String responseLine = null;
while ((responseLine = br.readLine()) != null) {
response.append(responseLine.trim());
}
System.out.println(response.toString());
}
応答がJSON形式の場合は、 Jackson library、 Gson 、org.jsonなどのサードパーティのJSONパーサーを使用して応答を解析します。
3. 結論
この記事では、HttpURLConnectionを使用してJSONコンテンツ本文でPOSTリクエストを作成する方法を学びました。
いつものように、関連するコードスニペットはGitHubのにあります。