HttpURLConnectionを使用したJSON POSTリクエストの作成

1. 概要

このチュートリアルでは、https://www.baeldung.com/java-http-request [_HttpURLConnection_]を使用してlink:/category/json/[JSON] POSTリクエストを作成する方法を示します。 。

2. _HttpURLConnection_を使用したJSON POSTリクエストの構築

2.1. _URL_オブジェクトを作成する

HTTP POSTメソッドを介して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. Request Content-Typeヘッダーパラメーターを設定する

  • “ content-type” _リクエストヘッダーを“ application / json” _ *に設定して、リクエストコンテンツをJSON形式で送信します。 JSON形式で要求本文を送信するには、このパラメーターを設定する必要があります。

    そうしないと、サーバーはHTTPステータスコード「400-bad request」を返します。
con.setRequestProperty("Content-Type", "application/json; utf-8");
また、コンテンツタイプとともに文字セットエンコーディングに言及したことに注意してください。 これは、要求コンテンツのエンコードがデフォルトのエンコードであるUTF-8エンコードと異なる場合に役立ちます。

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形式の場合、https://www.baeldung.com/jackson [_Jackson_]ライブラリ、https://www.baeldung.com/gson-string-to-jsonobjectなどのサードパーティJSONパーサーを使用します[_Gson_]、またはlink:/java-org-json[_org.json_]で応答を解析します。

3. 結論

この記事では、_HttpURLConnection_を使用してJSONコンテンツ本文でPOSTリクエストを作成する方法を説明しました。
いつものように、関連するコードスニペットはhttps://github.com/eugenp/tutorials/tree/master/core-java-modules/core-java-networking-2[GitHubで]にあります。