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()
。ただし、データを非同期で送信する場合、または特に複雑なシナリオを実装する必要がある場合は、この方法を使用できます。