CodeGym/Java Course/モジュール 3/HttpRequest への本文の追加

HttpRequest への本文の追加

使用可能

3.1 本文発行者

GET リクエストに加えて、 PUT リクエストPOST リクエストもあり、リクエストrequest body(つまりリクエスト本文)に追加する必要があることを忘れないでください。

このクラスには、このためのHttpRequest特別な内部クラスがありますBodyPublisher。技術的には複数の実装を持つインターフェースですが、これについては後で説明します。

そして、最も単純な、リクエスト本文がないことから始めます。はい、それは起こります。

HttpRequest request = HttpRequest.newBuilder()
   .uri(new URI("https://codegym.cc"))
   .POST(HttpRequest.BodyPublishers.noBody())
   .build();

シンプルで美しい。

3.2 ofString()

2 番目に一般的なオプションは、リクエスト本文として文字列を渡すことです。これは非常に簡単に行われます。

HttpRequest request = HttpRequest.newBuilder()
   .uri(new URI("https://codegym.cc"))
   .headers("Content-Type", "text/plain;charset=UTF-8")
   .POST(HttpRequest.BodyPublishers.ofString("Hello"))
   .build();

ちなみに、送信する文字列のエンコードを設定することができます。これは、リクエストの送信先の http サーバーが UTF8 で動作しない場合に非常に役立ちます。

HttpRequest request = HttpRequest.newBuilder()
   .uri(new URI("https://codegym.cc"))
   .POST(HttpRequest.BodyPublishers.ofString("Hello", Charset. US-ASCII)))
   .build();

3.3 ofFile()

最後に、 POST リクエストにファイルを添付することもできます。通常、これがアバターがサーバーにアップロードされる方法です。これを行うには、ローカル ファイルofFile()を転送するメソッドを呼び出す必要があります。Path

Path avatar = Path.of("c://avatar.jpeg");

HttpRequest request = HttpRequest.newBuilder()
   .uri(new URI("https://codegym.cc"))
   .headers("Content-Type", "image/jpeg")
   .POST(HttpRequest.BodyPublishers.ofFile(avatar))
   .build();

3.4 ofByteArray()

もう 1 つの一般的なシナリオは、一連のバイトをサーバーに送信することです。たとえば、オブジェクトをバイトのセットとしてシリアル化したり、何かを暗号化したり、単にデータ バッファーを送信したいとします。これにはメソッドが必要です.ofByteArray()

このメソッドはバイト配列をパラメータとして受け取ります。例:

byte[] data = "My Secret Message".getBytes();
byte[] dataEncripted = SuperEncriptor.encript(data);

HttpRequest request = HttpRequest.newBuilder()
   .uri(new URI("https://codegym.cc"))
   .headers("Content-Type", "application/octet-stream")
   .POST(HttpRequest.BodyPublishers.ofByteArray(dataEncripted))
   .build();

3.5 ofInputStream()

最後に、最後の重要なシナリオは、POST リクエストInputStreamにアタッチすることです。

これには特別な関数がありますofInputStream()。そして彼女はとても賢いのです。これにより、ストリームからストリームへのデータ転送を整理したり、まだオープンされていないPOS リクエストにデータ ストリームを添付したりすることができます。

ofInputStream()結果としてストリームを返す関数に関数を渡す必要がありますInputStream

例:

byte[] data = "My Secret Message".getBytes();
//wrapping an array of bytes into a stream.
InputStream is = new ByteArrayInputStream(data);

HttpRequest request = HttpRequest.newBuilder()
   .uri(new URI("https://codegym.cc"))
   .headers("Content-Type", "application/octet-stream")
   .POST(HttpRequest.BodyPublishers.ofInputStream (() -> is;))
   .build();

ここではわざわざ庭を柵で囲いませんでしたが、原理は理解していただけたと思います。なぜ彼らはそんなことをしたのでしょうか?ほとんどの場合、 を使用できますofByteArray()。ただし、データを非同期で送信する場合、または特に複雑なシナリオを実装する必要がある場合は、この方法を使用できます。

コメント
  • 人気
  • 新規
  • 古い
コメントを残すには、サインインしている必要があります
このページにはまだコメントがありません